是否有更多的pythonic方式来执行以下操作?
total = 0
for index, value in enumerate(frequencies):
total += value
frequencies[index] = total
答案 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,这正是您正在寻找的。 p>
frequencies = [1, 2, 3]
for i in range(1, len(frequencies)): frequencies[i] += frequencies[i - 1]
print frequencies
<强>输出强>
[1, 3, 6]