python在列表中运行总和



给定以下列表:

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))

相关内容

  • 没有找到相关文章

最新更新