如何修复空序列的reduce()而没有初始值错误?

时间:2019-01-01 16:21:36

标签: python

当我尝试使用以下代码查找阶乘时,它适用于除“ 0”以外的所有数字。当我输入为0时,显示以下错误。有人可以帮我理解和修复错误

from functools import reduce

n = int(input())
fact = lambda a, b: a*b if (n>=1) else 1
reduce(fact, range(1,n+1))

预期结果:当输入设为0时,应将1显示为输出

实际结果:显示以下错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)    
<ipython-input-124-52f472210976> in <module>    
      3     
      4 fact = lambda a, b: a*b if (n>=1) else 1    
----> 5 reduce(fact, range(1,n+1))    
      6 

TypeError: reduce() of empty sequence with no initial value

1 个答案:

答案 0 :(得分:5)

在Python 3中,至少reduce()具有一个“初始化程序”参数,该参数“位于计算中序列的项目之前,并在序列为空时用作默认值”({{ 3}})。因此,请使用1的初始化程序。您还可以通过使用operator模块中的乘法运算符来简化代码。

from functools import reduce
from operator import mul

result = reduce(mul, range(1,n+1), 1)

您现在应该了解您的错误。错误消息表明您尝试在reduce()上使用empty sequence with no initial value。放入1的初始值即可解决问题。