首页 > 解决方案 > 求前一个数到下一个数的累计和

问题描述

假设我有一个数字列表:

x = [12, 8, 8, 6]

如您所见,第一个数字是 12,所以这个数字和下一个数字 8 的总和是 20。接下来,20 和 8 的总和是 28,依此类推。

我想要的最终输出是:

(12, 20), (20,28), (28, 34)

这是我尝试过的:

from itertools import chain
x = [12,8,8]
it = chain(x,[0])
result = list(x + next(it) for x in it)
print ('\n',result,'\n')

标签: pythonlist

解决方案


这可以在理解中使用赋值表达式来记住最后一个数字:

last_num = x[0]
output = [(last_num, last_num:= last_num+i) for i in x[1:]]

[(12, 20), (20, 28), (28, 34)]

大致相当于:

last_num = x[0]
output = []
for i in x[1:]:
    output.append((last_num, last_num + i))
    last_num += i

或者,如果您可以导入itertools,您可以使用acumulate

print(*accumulate(x))
12 20 28 34

zipitertools.tee

from itertools import accumulate, tee

a, b = tee(accumulate(x))
next(b, None)
output = list(zip(a, b))

[(12, 20), (20, 28), (28, 34)]

推荐阅读