如何在Python中得到每一步“reduce”的结果?

sff*_*ffc 4 python functional-programming

在Python中,如果我想使用显式函数式编程来总结一个列表,我可以这样做

>>> import operator
>>> reduce(operator.add, [3, -1, 2])
4
Run Code Online (Sandbox Code Playgroud)

Mathematica 比 Python 更接近纯函数式语言,将其称为Fold而不是reduce,但结果是相同的。

In[1]:= Fold[Plus, {3, -1, 2}]
Out[1]= 4
Run Code Online (Sandbox Code Playgroud)

所以现在,在 Mathematica 中,如果我想在迭代过程中的每一步获得“折叠”的结果,我可以使用函数FoldList

In[2]:= FoldList[Plus, {3, -1, 2}]
Out[2]= {3, 2, 4}
Run Code Online (Sandbox Code Playgroud)

如何在 Python 中获取这样的列表(或者最好是迭代器)?一般来说,这个函数操作有名字吗?

sff*_*ffc 5

我找到了正确的函数:在Python中,它被称为accumulate

>>> from itertools import accumulate
>>> list(accumulate([3, -1, 2], operator.add))
[3, 2, 4]
Run Code Online (Sandbox Code Playgroud)

它似乎只在Python 3中可用。但是现在每个人都已经升级了,对吧?:)