所以我需要一个检查一个整数的代码,并检查它后面的整数是否是相同的值。如果是,则会将值添加到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
的结果。
我不知道怎么做。
答案 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]
将适当地转换为0
或1
这一事实。
答案 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