2015-10-02 88 views
3

在Python,如果我想用明確的函數式編程總結列表,我可以做如何在Python中的每一步獲得「減少」的結果?

>>> import operator 
>>> reduce(operator.add, [3, -1, 2]) 
4 

數學,更接近比Python純函數式語言,稱之爲Fold代替減少,但結果是一樣的。

In[1]:= Fold[Plus, {3, -1, 2}] 
Out[1]= 4 

所以,現在,在數學,如果我想獲得的「摺疊」在迭代過程中每一步的結果,我可以使用的功能FoldList

In[2]:= FoldList[Plus, {3, -1, 2}] 
Out[2]= {3, 2, 4} 

如何在Python中獲得這樣的列表(或最好是迭代器)?一般來說,這個功能操作是否有名字?

+1

子程序通常被稱爲'scan',數學運算稱爲*前綴和*。 –

+0

@gnat而不是downvoting我的帖子,如果你是一個模,可你只需動的問題到右側板?我的問題很好,我的回答是正確的。我似乎總是選錯了StackExchange。 – sffc

+0

幾年前,我想移動的問題,從我認爲堆棧溢出到服務器故障通過重新張貼,但MODS的告訴我,我不應該這樣做,我應該要求他們移動問題反而。 – sffc

回答

1

我找到了正確的功能:在Python中,它被稱爲積累

>>> from itertools import accumulate 
>>> list(accumulate([3, -1, 2], operator.add)) 
[3, 2, 4] 

它似乎只在Python 3中可用。但是現在每個人都升級了吧? :)

+0

簡單的'list(accumulate([3,-1,2]))'就足夠了。 'itertools.accumulate'在Python 3.2中是新的。 – vaultah