JAB*_*JAB 16 python python-itertools python-3.3 functools
在Python 3.3中,itertools.accumulate()通常会对提供的iterable重复应用加法运算,现在可以将函数参数作为参数; 这意味着它现在重叠functools.reduce().粗略看一下,现在两者之间的主要区别似乎是:
accumulate()默认为求和但不允许显式提供额外的初始条件,reduce()而不默认为任何方法但允许您提供初始条件以使用1/0元素序列,并且accumulate()首先采用迭代,然后先reduce()获取函数.这两者之间还有其他差异吗?或者这仅仅是两个函数的行为问题,最初的不同用途开始随时间收敛?
Wes*_*Wes 22
似乎accumulate保留了以前的结果,而reduce(在其他语言中称为折叠)并不一定如此.
例如,list(accumulate([1,2,3], operator.add))将返回,[1,3,6]而普通折叠将返回6
同时,(只是为了好玩,不这样做),你可以定义accumulate来讲reduce
def accumulate(xs, f):
return reduce(lambda a, x: a + [f(a[-1], x)], xs[1:], [xs[0]])
Run Code Online (Sandbox Code Playgroud)
itertools.accumulate
就像reduce但返回一个生成器*而不是一个值。该生成器可以为您提供所有中间步长值。所以基本上减少给你积累会给你的最后一个元素。
*生成器类似于迭代器,但只能迭代一次。
您可以在文档中看到有什么区别. reduce返回单个结果,序列的总和,产品等. accumulate返回所有中间结果的迭代器.基本上,accumulate在reduce操作的每个步骤的结果上返回一个迭代器.
| 归档时间: |
|
| 查看次数: |
14052 次 |
| 最近记录: |