Python 下一个整数为相同值时的总和整数列表
所以我需要一个代码来检查一个整数,并检查它后面的整数是否是相同的值。如果是,它将把值添加到Python 下一个整数为相同值时的总和整数列表,python,sum,integer,Python,Sum,Integer,所以我需要一个代码来检查一个整数,并检查它后面的整数是否是相同的值。如果是,它将把值添加到x input1 = [int(i) for i in str(1234441122)] x= 0 因此,我的代码目前给出了结果[1,2,3,4,4,4,1,1,2,2]。我希望它给出x=0+4+4+1+2的结果。 我不知道怎么做。你可以试试这个: s = str(1234441122) new_data = [int(a) for i, a in enumerate(s) if i+1 < len
x
input1 = [int(i) for i in str(1234441122)]
x= 0
因此,我的代码目前给出了结果[1,2,3,4,4,4,1,1,2,2]
。我希望它给出x=0+4+4+1+2
的结果。
我不知道怎么做。你可以试试这个:
s = str(1234441122)
new_data = [int(a) for i, a in enumerate(s) if i+1 < len(s) and a == s[i+1]]
print(new_data)
final_data = sum(new_data)
以下内容将起作用。将相邻的对压缩在一起,仅当第一个元素与第二个元素相同时,才使用第一个元素:
>>> lst = [1, 2, 3, 4, 4, 4, 1, 1, 2, 2]
>>> sum(x for x, y in zip(lst, lst[1:]) if x == y)
11
虽然从理论上讲,这种方法的[space-]效率要低一些(因为切片会创建一个额外的列表),但它在时间和空间上仍然具有O(N)
复杂性,并且比大多数基于索引访问的解决方案更具可读性。在保持简洁和避免任何导入的同时避免切片的一个棘手方法是:
>>> sum((lst[i] == lst[i-1]) * lst[i] for i in range(1, len(lst))) # Py2: xrange
11
这利用了这样一个事实,即lst[i]==lst[i-1]
将被适当地转换为0
或1
。也尝试一下这个:
input1 = [int(i) for i in str(1234441122)]
x= 0
res = [input1[i] for i in range(len(input1)-1) if input1[i+1]==input1[i]]
print(res)
print(sum(res))
输出:
[4, 4, 1, 2]
11
[4, 4, 1, 2]
11
您只需在字符串上迭代并将字符转换为整数。您需要迭代并与下一个字符进行比较
a = str(1234441122)
sum = 0
for i,j in enumerate(a[:-1]):
if a[i] == a[i+1]:
sum+=int(a[i])
print(sum)
输出
11
这里是@schwobasegll的答案的一个稍微节省空间的版本
>>> lst = [1, 2, 3, 4, 4, 4, 1, 1, 2, 2]
>>> it = iter(lst)
>>> next(it) # throw away first value
>>> sum(x for x,y in zip(lst, it) if x == y)
11
同样,使用itertools
模块中的islice
是等效的,但看起来更好一些
>>> from itertools import islice
>>> sum(x for x,y in zip(lst, islice(lst, 1, None, 1)) if x == y)
11
使用
itertools.groupby的另一种方法
l = [1, 2, 3, 4, 4, 4, 1, 1 ,2 ,2]
from itertools import groupby
sum(sum(g)-k for k,g in groupby(l))
#11
不需要那个列表。您可以从字符串中删除“非重复”数字:
到目前为止,您尝试了什么?我尝试使用print(1(input1))来查看是否会显示第一个整数,但没有成功。您的问题包括您尝试过的代码的其余部分。不幸的是,这不是一个讨论论坛或教程。请花点时间阅读它所包含的链接。花些时间练习这些例子。它将让您了解Python提供的帮助您解决问题的工具。您可以简单地对字符串进行切片,而不是i+1
input1=sum([int(n)if n==str_repr[i+1]else 0 for i,n in enumerate(str_repr[:-1]))
或sum(sum(g)-k for k,g in groupby(l))
。我也喜欢这个:)非常有创意!稍微短一点:sum((i和x==lst[i-1])*x代表i,x代表枚举(lst))
>>> n = 1234441122
>>> import re
>>> sum(map(int, re.sub(r'(.)(?!\1)', '', str(n))))
11