Python Reduce函数不';不要处理空列表
我之前创建了一个递归函数来查找列表的乘积。 现在我创建了相同的函数,但使用了Python Reduce函数不';不要处理空列表,python,list,lambda,reduce,Python,List,Lambda,Reduce,我之前创建了一个递归函数来查找列表的乘积。 现在我创建了相同的函数,但使用了reduce函数和lamdba 当我运行这段代码时,我得到了正确的答案 items = [1, 2, 3, 4, 10] print(reduce(lambda x, y: x*y, items)) 但是,当我给出一个空列表时,会出现一个错误-reduce(),它是没有初始值的空序列。为什么会这样 当我创建递归函数时,我创建了处理空列表的代码,reduce函数的问题在于它不是设计用来处理空列表的吗?还是有其他原因 我似
reduce
函数和lamdba
当我运行这段代码时,我得到了正确的答案
items = [1, 2, 3, 4, 10]
print(reduce(lambda x, y: x*y, items))
但是,当我给出一个空列表时,会出现一个错误-reduce(),它是没有初始值的空序列。为什么会这样
当我创建递归函数时,我创建了处理空列表的代码,reduce函数的问题在于它不是设计用来处理空列表的吗?还是有其他原因
我似乎在网上找不到任何问题或任何东西来解释原因,我只能找到有针对特定人员问题的解决方案的问题,没有解释。如以下所述:
如果存在可选初始值设定项,则该初始值设定项将放置在计算中iterable的项之前,并在iterable为空时用作默认值。如果未给出初始值设定项,并且iterable只包含一项,则返回第一项
因此,如果希望代码使用空列表,则应使用初始值设定项:
>>> reduce(lambda x, y: x*y, [], 1)
1
reduce()。如果序列中没有值,也没有显式值可从中开始,则无法开始操作,并且将没有有效的返回值。指定一个显式初始值,以允许它以空序列运行:
print (reduce(lambda x, y: x*y, items, 1))
啊,好吧,我很困惑,因为我发现了一个reduce的代码示例,其中包含了参数(函数、iterable、初始值设定项)。我以为这个列表不知怎么被用作初始值设定项,但是谢谢你的澄清@如果初始值设定项为None
,则使用Chrisiterable[0]
作为初始值设定项,但在您的情况下,[[0]
不存在,因此出现错误。