我想總結一個列表的元素,然後將每個總和的結果存儲在另一個列表中。將列表的總和結果存儲到另一個列表中?
到目前爲止,我有這樣的:
array1 = [1, 2, 3, 4]
print(sum(int(i) for i in array1))
輸出爲10
但我想要做的是這樣的:
input = [1, 2, 3, 4]
output = [1, 3, 6, 10]
我需要將值存儲到每個步驟的第二個列表中?
我想總結一個列表的元素,然後將每個總和的結果存儲在另一個列表中。將列表的總和結果存儲到另一個列表中?
到目前爲止,我有這樣的:
array1 = [1, 2, 3, 4]
print(sum(int(i) for i in array1))
輸出爲10
但我想要做的是這樣的:
input = [1, 2, 3, 4]
output = [1, 3, 6, 10]
我需要將值存儲到每個步驟的第二個列表中?
這你想要做什麼,但也許不是那麼好懂......
output = [sum(array1[:i+1]) for i in range(len(array1))]
你也可以做這樣的(這應該是更容易理解):
i = 0
output = []
for item in array1:
i += item
output.append(i)
使用列表理解可能不是最簡單的方法。你可以這樣做:
input = [1, 2, 3, 4]
output = []
total = 0
for i in input:
total += i
output.append(total)
如果你正在運行的Python 3.2或更高版本,已經有這個功能,itertools.accumulate
:
import itertools
input = [1,2,3,4]
output = list(itertools.accumulate(input))
如果您使用的是3.2以前的版本Python中,你可以隨時借用accumulate
文檔中提供的等效代碼:
def accumulate(iterable, func=operator.add):
'Return running totals'
# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
it = iter(iterable)
try:
total = next(it)
except StopIteration:
return
yield total
for element in it:
total = func(total, element)
yield total
不知道,謝謝! – Felix
,如果你正在做的很多,如果數字運算你可能numpy的有用的cumsum法會做你想要的這裏:
In [11]: import numpy as np
In [12]: array1 = np.array([1, 2, 3, 4])
In [13]: array1.cumsum()
Out[13]: array([ 1, 3, 6, 10])
這是很容易使用Python應用相同的邏輯:
def cumsum(l):
it = iter(l)
sm = next(it, 0)
yield sm
for i in it:
sm += i
yield sm
演示:
In [16]: array1 = [1, 2, 3, 4]
In [17]: list(cumsum(array1))
Out[17]: [1, 3, 6, 10]
感謝,所以這裏的交易是將每個結果附加到一個新數組(總數)中,現在非常清楚。 –