我正试图用下面的代码来包装我的头。我推断a映射到(a+x),x是一个迭代器,随后对集合中的每个元素进行迭代,这是正确的吗?(例如,最初是零,然后是1,然后是2)?
任何指点都非常感谢!
sum = reduce(lambda a, x: a + x, [0, 1, 2, 3, 4])
print sum #10发布于 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。
发布于 2015-11-15 18:03:55
这可能有助于想象它是如何工作的:
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实际上,这里有两个概念-- reduce和lambda。与使用lambda不同,您可以定义一个“正常”函数:
def add(a, b):
return a + b现在,它可能会更清楚一点:
>>> reduce(add, [0, 1, 2, 3, 4])
10 发布于 2015-11-15 17:56:55
在Python中,reduce将函数应用于列表的前2项,然后将相同的函数应用于列表中的第3项的结果,然后将函数应用于结果和列表中的第4项等等。
就你而言:
a = 0 + 1
b = a + 2
c = b + 3
d = c + 4
sum = dhttps://stackoverflow.com/questions/33722926
复制相似问题