在Python3.3中,itertools.accumulate()通常对提供的可迭代性重复应用加法操作,现在可以将函数参数作为参数;这意味着它现在与functools.reduce()重叠。粗略地看一下,两人之间的主要区别似乎是:
accumulate()默认为求和,但不允许显式提供额外的初始条件,而reduce()不默认任何方法,但允许提供用于1/0元素序列的初始条件,并且accumulate()首先获得可迭代性,而reduce()首先获得该函数。这两者还有什么区别吗?或者,这仅仅是两个功能的行为问题,最初不同的用途开始随着时间的推移而收敛?
发布于 2013-01-03 03:26:32
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]]) 发布于 2013-01-03 03:28:11
您可以在文档中看到其中的区别。reduce返回一个结果,即序列的和、积等。accumulate在所有中间结果上返回一个迭代器。基本上,accumulate对reduce操作的每一步的结果返回一个迭代器。
发布于 2016-05-14 16:24:27
itertools.accumulate与reduce类似,但返回生成器*而不是值。这个生成器可以给出所有中间步骤的值。所以基本上,减少给你积累的最后一个元素会给你。
*生成器就像迭代器,但只能迭代一次。
https://stackoverflow.com/questions/14132545
复制相似问题