Python 运行 列表中的总和

Python Running Sum in List

给定以下列表:

a=[1,2,3]

我想生成一个新列表,其中每个数字都是它和它前面的值的总和,如下所示:

result = [1,3,6]

逻辑:

1 没有前面的值,所以它保持不变。

3 是从第一个值 (1) 加上列表中第二个数字的值 (2)

6是前两个元素1和2之和加上第三个值3。

提前致谢!

Python 3 有 itertools.accumulate 正是为了这个目的:

>>> from itertools import accumulate
>>> a=[1,2,3]
>>> list(accumulate(a))
[1, 3, 6]

Python 有这个功能。

import itertools

result = list(itertools.accumlate([1, 2, 3]))

Python itertools 解决了一些问题,你应该花点时间仔细阅读。

https://docs.python.org/3/library/itertools.html

Avinash Raj 的代码无法正常工作。

a = [1,2,3]
b = [sum(a[:(i+1)]) for i, j in enumerate(a)]
print(b)

根据@Avinash Raj 编辑

普通循环怎么样?

a = [1,2,3]
result = []
s = 0
for item in a:
    s += item
    result.append(s)

print(result)

大约有一百种不同的方法可以计算这种累加和。根据您实际想要使用结果的目的,不太明显或不太通用的解决方案 可能 更节省时间或内存——尽管下面的简单解决方案是 O(1 ) 在内存方面和 O(N) 在时间方面。

几乎所有命令式编程语言中最直接的过程方法都是这样的:

csum=0
result=[]
for val in a:
    csum += val
    result.append(csum)

Python 标准库还包含一个函数来执行此操作:itertools.accumulate.

import itertools
result = list(itertools.accumulate(a))

如果你想要一个 numpy 解决方案

from numpy import cumsum
result = list(cumsum(a))

试试这个..

def running_sum(a):
  tot = 0
  for item in a:
    tot += item
    yield tot

a = [1,2,3,4]
print list(running_sum(a))