首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >itertools.accumulate()与functools.reduce()

itertools.accumulate()与functools.reduce()
EN

Stack Overflow用户
提问于 2013-01-03 03:15:43
回答 3查看 21.7K关注 0票数 30

在Python3.3中,itertools.accumulate()通常对提供的可迭代性重复应用加法操作,现在可以将函数参数作为参数;这意味着它现在与functools.reduce()重叠。粗略地看一下,两人之间的主要区别似乎是:

  1. accumulate()默认为求和,但不允许显式提供额外的初始条件,而reduce()不默认任何方法,但允许提供用于1/0元素序列的初始条件,并且
  2. accumulate()首先获得可迭代性,而reduce()首先获得该函数。

这两者还有什么区别吗?或者,这仅仅是两个功能的行为问题,最初不同的用途开始随着时间的推移而收敛?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-03 03:26:32

accumulate似乎保留了以前的结果,而reduce (在其他语言中称为折叠)并不一定。

例如,list(accumulate([1,2,3], operator.add))将返回[1,3,6],而普通折叠将返回6

而且(只是为了好玩,不要这么做),您可以用accumulate定义reduce

代码语言:javascript
复制
def accumulate(xs, f):
    return reduce(lambda a, x: a + [f(a[-1], x)], xs[1:], [xs[0]]) 
票数 36
EN

Stack Overflow用户

发布于 2013-01-03 03:28:11

您可以在文档中看到其中的区别。reduce返回一个结果,即序列的和、积等。accumulate在所有中间结果上返回一个迭代器。基本上,accumulatereduce操作的每一步的结果返回一个迭代器。

票数 9
EN

Stack Overflow用户

发布于 2016-05-14 16:24:27

itertools.accumulatereduce类似,但返回生成器*而不是值。这个生成器可以给出所有中间步骤的值。所以基本上,减少给你积累的最后一个元素会给你。

*生成器就像迭代器,但只能迭代一次。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14132545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档