Python中是否有内置的product()?

Geo*_*ows 78 python product list

我一直在查看教程和书籍,但我没有提到内置的产品功能,即与sum()类型相同,但我找不到任何类似的东西prod().

我是唯一能通过导入mul()运营商找到列表中项目的产品的方法吗?

Ray*_*ger 92

宣言

恩,那就对了.Guido 拒绝了内置prod()函数的想法,因为他认为很少需要它.

Python 3.8更新

在Python 3.8中,prod()被添加到math模块中:

>>> from math import prod
>>> prod(range(1, 11))
3628800
Run Code Online (Sandbox Code Playgroud)

替代reduce()

正如您所建议的那样,使用reduce()operator.mul()制作自己并不难:

def prod(iterable):
    return reduce(operator.mul, iterable, 1)

>>> prod(range(1, 5))
24
Run Code Online (Sandbox Code Playgroud)

在Python 3中,reduce()函数被移动到functools模块,因此您需要添加:

from functools import reduce
Run Code Online (Sandbox Code Playgroud)

具体案例:因子

作为旁注,prod()的主要激励用例是计算阶乘.我们已经在数学模块中对此有所支持:

>>> import math

>>> math.factorial(10)
3628800
Run Code Online (Sandbox Code Playgroud)

替代对数

如果您的数据由浮点数组成,则可以使用带有指数和对数的sum()来计算产品:

>>> from math import log, exp

>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993

>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998
Run Code Online (Sandbox Code Playgroud)

  • BDFL声明的来源:http://bugs.python.org/issue1093 (12认同)
  • 当然,频繁使用阶乘的人应该将它们缓存在列表中,这样就不会在每次调用时重新计算;-) fact = [math.factorial(i)for i in range(100)] (5认同)
  • @RaymondHettinger另一种奇特的方式是在因子函数上使用memoize装饰器http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize (3认同)
  • @bli 在数学级数阶乘中几乎无处不在。 (2认同)

Fre*_*Foo 19

product在Python中没有,但您可以将其定义为

def product(iterable):
    return reduce(operator.mul, iterable, 1)
Run Code Online (Sandbox Code Playgroud)

或者,如果您有NumPy,请使用numpy.product.

  • Re`numpy.product`,请注意_arithmetic在使用整数类型时是模块化的,并且在overflow_ [(source)]上没有引发错误(http://docs.scipy.org/doc/numpy/reference/generated/numpy. prod.html). (5认同)

Pau*_*sen 12

由于reduce()函数已移至模块functoolspython 3.0,因此您必须采用不同的方法.

您可以使用functools.reduce()访问该功能:

product = functools.reduce(operator.mul, iterable, 1)
Run Code Online (Sandbox Code Playgroud)

或者,如果你想遵循python-team的精神(reduce()由于他们认为for更易读,因此删除了),使用循环执行:

product = 1
for x in iterable:
    product *= x
Run Code Online (Sandbox Code Playgroud)


Hun*_*tR2 8

from numpy import multiply, product
list1 = [2,2,2]
list2 = [2,2,2]
mult = 3
prod_of_lists = multiply(list1,list2)
>>>[4,4,4]
prod_of_list_by_mult = multiply(list1,mult)
>>>[6,6,6]
prod_of_single_array = product(list1)
>>>8
Run Code Online (Sandbox Code Playgroud)

numpy为列表提供了许多非常酷的功能!

  • 我不确定那些刚刚开始使用Python教程的人应该指出numpy来解决诸如简单问题.正如他们所说的那样,"现在他们有两个问题":-)一旦获得Python基础知识,我同意numpy对于任何进行数字运算的人来说,我们都是对工具包的强大补充. (3认同)
  • 我喜欢这个答案指向一个功能强大的数字库 - 如果提问的人真的需要做除了家庭作业以外的任何原因的一系列标量的产品,那么这个人可能需要考虑类似于更大的问题.他们试图解决的问题. (2认同)