gpt4 book ai didi

python - 如何对列表中的连续重复项求和?

转载 作者:太空宇宙 更新时间:2023-11-04 07:13:47 25 4
gpt4 key购买 nike

我正在互联网上做一些练习题以申请实习并进入了一个困难的实习。问题是对相同的连续数字求和。

示例:[1,1,3,4,4,5] ---> [2,3,8,5]

 def sum_consecutive(s):
p = []
for i in range(len(s)):
if s[i] == s[i-1]:
p.append(s[i] + s[i-1])
p.remove(s[i])
elif s[i] != s[i-1]:
p.append(s[i])
return p

当在 [1,4,4,4,0,4,3,3,1] 上运行上面的代码时,它应该返回 [1,12,0,4,6,1] 而不是返回

在 sum_consecutive(s)

    if s[i] == s[i-1]:
p.append(s[i] + s[i-1])
p.remove(s[i]) #This line is the problem
elif s[i] != s[i-1]:
p.append(s[i])

错误:

ValueError: list.remove(x): x not in list

最佳答案

使用一个变量来跟踪最后看到的值,如果相同则将其添加到当前索引。

def sum_consecutive(s):
p = s[:1] # final list
cur = s[0] # keep track of last seen value

for i in s[1:]: # your exercise: replace this with `range`
if i == cur:
p[-1] += i
else:
p.append(i)
cur = i

return p

sum_consecutive([1, 4, 4, 4, 0, 4, 3, 3, 1])
# [1, 12, 0, 4, 6, 1]

作为奖励,我们不要忘记 stdlib 存在,因此您可以使用 itertools.groupby在一行中执行此操作。

from itertools import groupby
[sum(g) for _, g in groupby([1, 4, 4, 4, 0, 4, 3, 3, 1])]
# [1, 12, 0, 4, 6, 1]

关于python - 如何对列表中的连续重复项求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56537755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com