当下一个整数是相同的值时,求和整数列表

时间:2017-12-05 14:51:07

标签: 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的结果。 我不知道怎么做。

7 个答案:

答案 0 :(得分:8)

以下内容有效。将相邻的对拼接在一起,只有第一个元素与第二个元素相同才能将它们连接起来:

>>> 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]将适当地转换为01这一事实。

答案 1 :(得分:4)

使用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

答案 2 :(得分: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)

输出:

[4, 4, 1, 2]
11

答案 3 :(得分:2)

您只是在字符串上迭代并将字符转换为整数。您需要迭代并与下一个字符进行比较。

FieldInfoArray(0) = Array(0,1)

        i = 1
        For Each ParsedDelimiter In DelimitersToParse.Cells
            FieldInfoArray(i) = Array(ParsedDelimiter.Value, 1)
            i = i + 1
        Next ParsedDelimiter

DataToParse.TextToColumns Destination:=DataToParse, DataType:=xlFixedWidth, _
        FieldInfo:=FieldInfoArray, TrailingMinusNumbers:=True

输出

a = str(1234441122)
sum = 0
for i,j in enumerate(a[:-1]):
    if a[i] == a[i+1]:
        sum+=int(a[i])
print(sum)

答案 4 :(得分:2)

不需要那份清单。您可以从字符串中删除“非重复”数字:

>>> n = 1234441122
>>> import re
>>> sum(map(int, re.sub(r'(.)(?!\1)', '', str(n))))
11

答案 5 :(得分: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

答案 6 :(得分:1)

这是@ schwobaseggl答案的空间效率稍高的版本。

>>> 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

Alernatively,使用islice模块中的itertools是等效的,但看起来更好。

>>> from itertools import islice
>>> sum(x for x,y in zip(lst, islice(lst, 1, None, 1)) if x == y)
11