给定以下列表:
a=[1,2,3]
我想生成一个新列表,其中每个数字的总和及其之前的值,如这样:
result = [1,3,6]
逻辑:
1没有前面的值,因此保持不变。
3是从列表(2)
中第二个数字值添加到的第一个值(1)6来自前两个元素的1和2的总和,加上第三个值3。
预先感谢!
python 3为此目的具有itertools.accumulate
:
>>> from itertools import accumulate
>>> a=[1,2,3]
>>> list(accumulate(a))
[1, 3, 6]
如果您想要numpy解决方案
from numpy import cumsum
result = list(cumsum(a))
普通循环怎么样?
a = [1,2,3]
result = []
s = 0
for item in a:
s += item
result.append(s)
print(result)
python具有一个功能。
import itertools
result = list(itertools.accumlate([1, 2, 3]))
Python Itertools解决了一些问题,您应该花一些时间阅读它们。
https://docs.python.org/3/library/itertools.html
尝试这个..
def running_sum(a):
tot = 0
for item in a:
tot += item
yield tot
a = [1,2,3,4]
print list(running_sum(a))
avinash raj的代码无法正常工作。
a = [1,2,3]
b = [sum(a[:(i+1)]) for i, j in enumerate(a)]
print(b)
基于@avinash raj
大约有一百种不同的方法来完成这种累积总和。取决于您实际使用的结果,不太明显或不那么明显的通用解决方案可能会更及时或记忆效率 - 尽管以下简单解决方案是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))