2016-03-10 40 views
0

我想總結一個列表的元素,然後將每個總和的結果存儲在另一個列表中。將列表的總和結果存儲到另一個列表中?

到目前爲止,我有這樣的:

array1 = [1, 2, 3, 4]  
print(sum(int(i) for i in array1)) 

輸出爲10

但我想要做的是這樣的:

input = [1, 2, 3, 4]  
output = [1, 3, 6, 10] 

我需要將值存儲到每個步驟的第二個列表中?

回答

0

這你想要做什麼,但也許不是那麼好懂......

output = [sum(array1[:i+1]) for i in range(len(array1))] 

你也可以做這樣的(這應該是更容易理解):

i = 0 
output = [] 
for item in array1: 
    i += item 
    output.append(i) 
1

使用列表理解可能不是最簡單的方法。你可以這樣做:

input = [1, 2, 3, 4] 
output = [] 
total = 0 
for i in input: 
    total += i 
    output.append(total) 
+0

感謝,所以這裏的交易是將每個結果附加到一個新數組(總數)中,現在非常清楚。 –

2

如果你正在運行的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 
+0

不知道,謝謝! – Felix

0

,如果你正在做的很多,如果數字運算你可能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] 
相關問題