Python 如何求连续数之和?

Python 如何求连续数之和?,python,python-3.x,Python,Python 3.x,如果给您的列表的值为[1,2,2,4,4,0]。您需要创建一个函数,该函数接受整数列表(正/负)并返回连续重复的数字之和。我们需要以列表格式返回结果 上述列表的答案是[1,4,8,0] 我尝试在for循环中创建while循环,但完全失败了。我完全卡住了 def sum_consecutives(lst): n_list = [] total = 0 count = 0 for i in range(0,len(lst)): print(sum_consecuti

如果给您的列表的值为
[1,2,2,4,4,0]
。您需要创建一个函数,该函数接受整数列表(正/负)并返回连续重复的数字之和。我们需要以列表格式返回结果

上述列表的答案是[1,4,8,0]

我尝试在for循环中创建while循环,但完全失败了。我完全卡住了

def sum_consecutives(lst):
    n_list = []
    total = 0
    count = 0

for i in range(0,len(lst)):
    print(sum_consecutives([0, 7, 7, 7, 5, 4, 9, 9, 0]))
此函数应输出
[0,21,5,4,18,0]
组,然后求和

>>> from itertools import groupby
>>> [sum(vs) for _, vs in groupby([1,2,2,4,4,0])]
[1, 4, 8, 0]
>>> [sum(vs) for _, vs in groupby([0, 7, 7, 7, 5, 4, 9, 9, 0])]
[0, 21, 5, 4, 18, 0]

group
收集相等值的序列,因此
groupby([1,2,2,4,4,0])
返回类似于
[(1[1])、(2[2,2])、(4[4,4])、(0[0])的内容
。(它提供了迭代器,而不是相等项的列表,但是更容易直观地看到它使用具体列表所做的事情。)

您的
for
循环不包含任何代码;请告诉我们您到目前为止做了什么,以及您在
for
循环中的具体位置遇到了问题。
[len(list(vs))*k代表k,vs在groupby中([0,7,7,7,5,4,9,9,0])
也可以使用,或者使用
deque
在不创建硬编码列表的情况下进行计数。不确定您在该评论中的目的是什么。没有必要计算任何东西
vs
只是原始列表中值的(子)迭代器。由于所有值都相等,求和等于计数+乘法。这就是我的意思,是的,但是我不确定你得到的任何轻微的速度都值得在可读性上的改变。我甚至不确定它会更快,TBH