【发布时间】:2012-02-24 21:39:28
【问题描述】:
据我了解,reduce 函数需要一个列表l 和一个函数f。然后,它在列表的前两个元素上调用函数f,然后用下一个列表元素和前一个结果重复调用函数f。
所以,我定义了以下函数:
以下函数计算阶乘。
def fact(n):
if n == 0 or n == 1:
return 1
return fact(n-1) * n
def reduce_func(x,y):
return fact(x) * fact(y)
lst = [1, 3, 1]
print reduce(reduce_func, lst)
现在,这不应该给我((1! * 3!) * 1!) = 6吗?但是,它却给出了720。为什么720?它似乎也采用了6 的阶乘。但是,我需要了解原因。
有人可以解释为什么会发生这种情况以及解决方法吗?
我基本上想计算列表中所有条目的阶乘乘积。 备份计划是运行一个循环并计算它。但是,我更喜欢使用 reduce。
【问题讨论】:
-
谢谢大家。我发现了我错过的愚蠢的事情。我已经在答案中发布了正确的方法。
-
要更深入地了解 reduce,请参阅下面显示的纯 python 等效项。