在Python中使用Reduce函数来查找因子

问题描述 投票:2回答:5

嗨,我正在尝试编写一个函数来查找任何给定数字的阶乘积。例如对于阶乘(6),我将得到6 * 5 * 3 * 2 * 1的乘积。

因此对于阶乘(3),输出将为6。

我到目前为止的功能是:

import functools 

def mult(x, y):
    return x * y


def factorial(n):
    if n == 0:
        return 1
    else:
        functools.reduce(mult(n,factorial(n - 1)))

但我一直得到一个错误,Python期望2个参数和1给出。我知道我必须以某种方式使用range,但我无法弄明白。如何编辑现有代码以使其正常运行?

python map reduce factorial
5个回答
4
投票

你可以很容易地做到这一点:

>>> import functools, operator
>>> functools.reduce(operator.mul, xrange(1, 6))
120

请注意,第一个参数是一个函数(您传递函数调用的结果)。第二个参数是可迭代的。另请注意,以这种方式编写,不需要递归...

operator.mul相当于你的mult功能


1
投票

如果你正在使用qazxsw poi,那么我会推荐qazxsw poi。如果你正在使用2.7,那么我们看到looking here at the documentation for reduce

也就是说,我们看到我们需要以与3相同的方式调用functools.reduce is the same as 2.7's reduce。以下是对此的表示:

functools

,转换为:

2.7

对于您的示例,您正在制作自己的运算符,这使 reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) 感到困惑。这可以通过添加 functools.reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) ,然后使用reduce中定义的声明方法(即​​import operator)来解决。

我希望这有助于清理事情!


1
投票
operator

当然,如果您愿意,可以使用自己的多功能而不是lambda。


0
投票

来自functools import reduce

f = lambda x,y:x * y

def factorial(number):if(number == 1):return 1 else:return reduce(f,range(1,number + 1))

打印(阶乘(n))的


0
投票
operator.add
© www.soinside.com 2019 - 2024. All rights reserved.