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

时间:2011-10-30 22:18:06

标签: python list product

我一直在查看教程和书籍,但我找不到内置产品功能,即与sum()类型相同,但我找不到任何内容,例如prod()。< / p>

我是否可以通过导入mul()运营商找到列表中商品的唯一方式?

4 个答案:

答案 0 :(得分:89)

宣告

是的,没错。 Guido rejected the idea用于内置prod()函数,因为他认为很少需要它。

Python 3.8更新

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

>>> from math import prod
>>> prod(range(1, 11))
3628800

替代reduce()

根据您的建议,使用reduce()operator.mul()制作自己并不难:

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

>>> prod(range(1, 5))
24

在Python 3中,reduce()函数已移至functools module,因此您需要添加:

from functools import reduce

具体案例:Factorials

作为旁注, prod()的主要激励用例是计算阶乘。我们已经在math module

中为此提供了支持
>>> import math

>>> math.factorial(10)
3628800

替代对数

如果您的数据包含浮点数,则可以使用带有指数和对数的 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

答案 1 :(得分:19)

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

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

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

答案 2 :(得分:12)

reduce() function has been moved to the module functools python 3.0以来,您必须采取不同的方法。

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

product = functools.reduce(operator.mul, iterable, 1)

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

product = 1
for x in iterable:
    product *= x

答案 3 :(得分:7)

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

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