首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >还原- Python

还原- Python
EN

Stack Overflow用户
提问于 2015-11-15 17:51:08
回答 3查看 395关注 0票数 2

我正试图用下面的代码来包装我的头。我推断a映射到(a+x)x是一个迭代器,随后对集合中的每个元素进行迭代,这是正确的吗?(例如,最初是零,然后是1,然后是2)?

任何指点都非常感谢!

代码语言:javascript
复制
sum = reduce(lambda a, x: a + x, [0, 1, 2, 3, 4])
print sum #10
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-15 17:55:49

是的,你是对的。

只是一个小小的修正:a最初不是零。它是用集合的第一个元素初始化的。因此,迭代从第二个元素开始。

来自文档

将两个参数的函数累加到从左到右的可迭代项,从而将可迭代性降为单个值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])计算((((1+2)+3)+4)+5)

因此,在您的例子中,reduce(lambda a, x: a + x, [0, 1, 2, 3, 4])计算((((0+1)+2)+3)+4),即10

票数 2
EN

Stack Overflow用户

发布于 2015-11-15 18:03:55

这可能有助于想象它是如何工作的:

代码语言:javascript
复制
def my_reduce(func, iterable):
    iterator = iter(iterable)
    res = next(iterator)
    for arg in iterator:
        res = func(res, arg)
    return res

>>> my_reduce(lambda a, x: a + x, [0, 1, 2, 3, 4])
10

实际上,这里有两个概念-- reducelambda。与使用lambda不同,您可以定义一个“正常”函数:

代码语言:javascript
复制
def add(a, b):
    return a + b

现在,它可能会更清楚一点:

代码语言:javascript
复制
>>> reduce(add, [0, 1, 2, 3, 4])
10 
票数 1
EN

Stack Overflow用户

发布于 2015-11-15 17:56:55

在Python中,reduce将函数应用于列表的前2项,然后将相同的函数应用于列表中的第3项的结果,然后将函数应用于结果和列表中的第4项等等。

就你而言:

代码语言:javascript
复制
 a = 0 + 1
 b = a + 2
 c = b + 3
 d = c + 4
 sum = d
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33722926

复制
相关文章

相似问题

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