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

标签 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

最佳答案

至少在 Python 3 中,reduce() 有一个“初始化器”参数,它“在计算中放在序列的项之前,并在序列被执行时作为默认值空”(documentation)。所以使用 1 的初始值设定项。您还可以通过使用 operator 模块中的乘法运算符来简化代码。

from functools import reduce
from operator import mul

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

你现在应该明白你的错误了。错误消息表明您试图在 没有初始值的空序列 上使用 reduce()。输入 1 的初始值可以解决这个问题。

关于python - 如何修复没有初始值错误的空序列的 reduce()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997025/

相关文章:

python - 将生成的 TFIDF 计算添加到 Pyspark 中原始文档的数据框中

python - Pandas groupby 将未分组的列连接成逗号分隔的字符串

python - 如何防止跨用户相关对象

Python 框架

python - 比较随机和urandom

python - 当条件是列表时,如何一次从 dataFrame 中查找数据

python - 删除子字符串 pandas, python

python - 如何在 appengine for Python 上使用 bcrypt/scrypt?

python - 在 Python 循环中重复超时或用户输入

jquery - Tornado 服务器未返回带有 self.write 的响应