的Python在列表

问题描述:

鉴于以下列表运行总和:的Python在列表

a=[1,2,3] 

我想产生一个新的列表,每个数字都是它的总和与之前的值,如:

result = [1,3,6] 

逻辑:

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

3是由式(1)加入到所述第二数量的值列表中的第一个值(2)

图6是从图1和2从前两个元素的总和,再加上第三值3.

在此先感谢!

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

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

如果它比那些内置的Python版本要快得多,我就会发现它。 –

Python有itertools.accumulate出于这样的目的:

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

你回答了这个问题好,我仍然格式化我的回答:(。 –

Python有这个功能。

import itertools 

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

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

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

阿维纳什Raj的代码无法正常工作。

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

编辑基于@Avinash拉吉

+0

是的,很多简单一个'[sum(a [:i + 1])for i,j in enumerate(a)]' –

怎么样一个普通的循环?

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

print(result) 

大约有一百种不同的方式来做这种累计和。根据你实际想要使用的结果,一个不太明显的或者不那么通用的解决方案可能会更具时间或者内存效率 - 尽管下面的简单解决方案在内存和O(1)方面是O(1) N)。

在几乎每一个命令式编程语言最简单的处理方式是这样的:

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

Python标准库中还包括一个函数来完成这一点:itertools.accumulate

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

应该是:'result.append(csum)' – user4421975

+0

Derp ...修正,谢谢。 –

试试这个..

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

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