次のことを行うためのよりPythonicな方法はありますか?
total = 0
for index, value in enumerate(frequencies):
total += value
frequencies[index] = total
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
.
これはインプレース バージョンであり、Python 2.x を使用している場合は、これがまさに探しているものです。
frequencies = [1, 2, 3]
for i in range(1, len(frequencies)): frequencies[i] += frequencies[i - 1]
print frequencies
出力
[1, 3, 6]