Geo*_*ows 78 python product list
我一直在查看教程和书籍,但我没有提到内置的产品功能,即与sum()类型相同,但我找不到任何类似的东西prod().
我是唯一能通过导入mul()运营商找到列表中项目的产品的方法吗?
Ray*_*ger 92
恩,那就对了.Guido 拒绝了内置prod()函数的想法,因为他认为很少需要它.
在Python 3.8中,prod()被添加到math模块中:
>>> from math import prod
>>> prod(range(1, 11))
3628800
Run Code Online (Sandbox Code Playgroud)
正如您所建议的那样,使用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)
Fre*_*Foo 19
product在Python中没有,但您可以将其定义为
def product(iterable):
return reduce(operator.mul, iterable, 1)
Run Code Online (Sandbox Code Playgroud)
或者,如果您有NumPy,请使用numpy.product.
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)
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为列表提供了许多非常酷的功能!