当我研究 Python 中的reduce()
函数如何工作时,我遇到了这段代码。它打印7
,这是预期的输出,并从list1
返回项目总数,与len(list1)
相同。我很想知道这段代码是如何工作的。
- 减少中的
0
有什么作用? - 这是否意味着
x = list1
和y = 0
?在这种情况下,为什么x + y
返回列表中所有值(28
(的总和?
from functools import reduce
list1 = [1 ,2, 3, 4, 5, 6, 7]
count = reduce(lambda x, y : x + 1, list1, 0)
print(count)
输出:7
reduce函数有很好的文档记录
如文档所述:
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
本质上计算((((1+2)+3)+4)+5)
,其中x
是上一个结果(默认零(,y
是列表中的下一个值。
示例中的零充当初始值,因此:
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5], 0)
计算(((((0+1)+2)+3)+4)+5)
在您的示例中,未使用y
,因此
reduce(lambda x, y : x + 1, list1, 0)
相当于(0+1)+1)+1)+1)+1)+1)+1)
,所以你得到答案7
是要传递给提供给
reduce()
的函数的初始值,在 yout 的情况下 -lambda x, y: x+1
。reduce()
获取传递给它的列表的第一个和第二个元素,并将它们传递给lambda
函数。 然后,reduce()
获取此函数的输出,并将其与列表中的第三个元素一起反馈给它。 此过程一直持续到列表中的所有值都通过该函数。λ x, y: x+1
只是意味着"取两个数字作为参数(x 和 y(并返回第一个加 1。 由于要传递x
的第一个值是 0(它是提供给reduce()
的初始值(,lambda
只会为列表中的每个元素将其增加 1