Reduce函数不处理空列表

Chr*_*ris 4 python reduce lambda list

我之前创建了一个递归函数来查找列表的产品.现在我已经创建了相同的功能,但使用了reduce函数和lamdba.

当我运行此代码时,我得到了正确的答案.

items = [1, 2, 3, 4, 10]
print(reduce(lambda x, y: x*y, items))
Run Code Online (Sandbox Code Playgroud)

但是,当我给出一个空列表时,会发生错误 - reduce() of empty sequence with no initial value.为什么是这样?

当我创建递归函数时,我创建了处理空列表的代码,reduce函数的问题只是它不是为了处理和清空列表而设计的吗?或者还有其他原因吗?

我似乎无法在网上找到问题或任何解释原因的问题,我只能找到解决该特定人员问题的问题,无需解释.

jul*_*enc 13

正如文档中所写:

如果存在可选的初始值设定项,则它将放置在计算中的iterable项之前,并在iterable为空时用作默认值.如果未给出初始化程序且iterable只包含一个项目,则返回第一个项目.

因此,如果您希望代码使用空列表,则应使用初始化程序:

>>> reduce(lambda x, y: x*y, [], 1)
1
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 5

reduce()需要初始值才能从中开始操作.如果序列中没有值且没有显式值,那么它就无法开始操作,也没有有效的返回值.指定显式初始值,以允许它以空序列运行:

print (reduce(lambda x, y: x*y, items, 1))
Run Code Online (Sandbox Code Playgroud)