为什么这两个折叠会因为一个缺少初始值而返回不同的结果?

时间:2012-06-06 09:53:59

标签: python functional-programming

我试图找到列表的长度。

In [77]: reduce(lambda acc, x: acc + 1, [x for x in range(8)])
Out[77]: 7

In [78]: reduce(lambda acc, x: acc + 1, [x for x in range(8)], 0)
Out[78]: 8

但似乎我需要传递初始值才能正常工作。为什么?

2 个答案:

答案 0 :(得分:2)

第一个元素从第一个元素(0)开始,并为其他七个元素添加1。第二个从0开始,并为八个元素中的每一个添加1。

答案 1 :(得分:1)

如果你没有传递一个起始值,列表的第一个值将被用作起始值,并且永远不会作为x参数传递给你的lambda函数,所以实际上你得到{{1作为你的结果。