2014-05-24 44 views
-1

假設我有在Python相同的大小,首先兩個列表:Python 2.7中內置了這個函數嗎?

[100, 200, 300, 400] 

,我想對方是:

[0, 100, 300, 600] 

這是在第二個列表中的每個元素等於總和之前的所有元素。

是否有一個內置的Python函數在列表中執行這樣的操作?或者我必須考慮一個算法來做到這一點?

+0

我不不認爲這樣的功能存在。你可以寫一個簡單的函數來做到這一點 – shashank93rao

+1

不,沒有內置的2.x. – jonrsharpe

+1

你有意無視第一個列表的最後一個元素嗎?更合乎邏輯的結果是'[0,100,300,600,1000]',或甚至簡單地'[100,300,600,1000]'。 – user4815162342

回答

2

如果使用Python 3.2+,您可以使用itertools.accumulate

>>> import itertools 
>>> 
>>> a_list = [100, 200, 300, 400] 
>>> list(itertools.accumulate([0] + a_list[:-1])) 
[0, 100, 300, 600] 

UPDATE

爲了避免臨時列表的創建,使用itertools.isliceitertools.chain

>>> from itertools import chain, accumulate, islice 
>>> 
>>> a_list = [100, 200, 300, 400] 
>>> list(accumulate(chain([0], islice(a_list, 0, len(a_list) - 1)))) 
[0, 100, 300, 600] 
+1

'accumulate(chain([0],islice(a_list,0,-1))''會避免創建兩個臨時列表,對於那些關心這類事情的人.BTW忽略列表的最後一個元素看起來像是錯誤的問題,我已經要求提交者澄清。 – user4815162342

+0

@ user4815162342,謝謝你的評論。我更新了答案根據你。順便說一句,'itertools.islice'不接受負指數。 – falsetru

+0

感謝您的更新的代價是提高效率的代價(通常情況下)代碼的可讀性較差,但我仍然相信OP沒有打算忽略輸入列表的最後一個元素。 – user4815162342