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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中使用Reduce函数来查找因子相关的知识,希望对你有一定的参考价值。

嗨,我正在尝试编写一个函数来查找任何给定数字的阶乘积。例如对于阶乘(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,但我无法弄明白。如何编辑现有代码以使其正常运行?

答案

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

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

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

operator.mul相当于你的mult功能

另一答案

如果你正在使用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)来解决。

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

另一答案
operator

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

另一答案

来自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))的

另一答案
operator.add

以上是关于在Python中使用Reduce函数来查找因子的主要内容,如果未能解决你的问题,请参考以下文章

python3中reduce()函数的使用方法示例

Javascript:使用 reduce() 查找最小值和最大值?

3.python函数编程-reduce函数

12-python基础—python3中的reduce()

Python reduce函数介绍

使用 reduce() 的有用代码? [关闭]