减少 - Python

时间:2015-11-15 17:51:09

标签: python lambda reduce

我试图围绕以下代码。我是否正确地推断出a被映射到(a+x)并且x是一个迭代器,随后迭代集合中的每个元素? (例如,最初是零,然后是1,然后是2)?

任何指针都非常赞赏!

sum = reduce(lambda a, x: a + x, [0, 1, 2, 3, 4])
print sum #10

3 个答案:

答案 0 :(得分:2)

是的,你是对的。

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

来自documentation

  

将两个参数的函数累加到可迭代的项目中,从左到右,以便将迭代减少到单个值。例如,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

答案 1 :(得分:1)

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

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。您可以定义一个" normal"而不是使用lambda。功能:

def add(a, b):
    return a + b

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

>>> reduce(add, [0, 1, 2, 3, 4])
10 

答案 2 :(得分:0)

在Python中,reduce将一个函数应用于列表的前两项,然后将相同的函数应用于列表中第三项的结果,然后将函数应用于结果和第四项在列表中等等。

在你的情况下:

 a = 0 + 1
 b = a + 2
 c = b + 3
 d = c + 4
 sum = d