将元素汇总到某个索引并覆盖该值

时间:2013-10-02 12:04:33

标签: python algorithm

是否有更多的pythonic方式来执行以下操作?

total = 0
for index, value in enumerate(frequencies):
    total += value
    frequencies[index] = total

4 个答案:

答案 0 :(得分:4)

对于Python 3,请使用itertools.accumulate

frequencies = list(itertools.accumulate(frequencies))

你的代码可能就像Pythonic一样。人们可以很容易地理解它的作用。

答案 1 :(得分:1)

在Python 2.x上,您可以使用生成器函数(请注意,这将返回一个新列表):

def accumulate(lis):
    total = 0
    for item in lis:
        total += item
        yield total


>>> list(accumulate(range(5)))
[0, 1, 3, 6, 10]

在Python 3.x上使用itertools.accumulate

答案 2 :(得分:1)

我没有在你写的内容中看到任何内容。另一种选择可能是numpy.cumsum()

>>> 
>>> import numpy as np
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> a.cumsum()
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45])
>>> 

答案 3 :(得分:0)

这是一个就地版本,如果您使用的是python 2.x,这正是您正在寻找的。

frequencies = [1, 2, 3]
for i in range(1, len(frequencies)): frequencies[i] += frequencies[i - 1]
print frequencies

<强>输出

[1, 3, 6]