Pat*_*ney 181 python product built-in pep
Python的sum()函数返回迭代中的数字总和.
sum([3,4,5]) == 3 + 4 + 5 == 12
Run Code Online (Sandbox Code Playgroud)
我正在寻找返回产品的功能.
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
Run Code Online (Sandbox Code Playgroud)
我很确定这样的功能存在,但我找不到它.
ojr*_*rac 206
实际上,Guido否决了这个想法:http://bugs.python.org/issue1093
但是,如该问题所述,您可以轻松制作一个:
from functools import reduce # Valid in Python 2.6+, required in Python 3
import operator
reduce(operator.mul, (3, 4, 5), 1)
Run Code Online (Sandbox Code Playgroud)
Ray*_*ger 46
在Python 3.8中,prod函数被添加到math模块中.请参阅:math.prod().
您正在寻找的函数将被称为prod()或product(),但Python没有该函数.所以,你需要自己编写(这很容易).
恩,那就对了.Guido 拒绝了内置prod()函数的想法,因为他认为很少需要它.
正如您所建议的那样,使用reduce()和operator.mul()制作自己并不难:
from functools import reduce
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)
注意,使用log()要求所有输入都是正数.
zwe*_*nde 40
没有一个内置的,但其实很简单推出自己的,这表现在这里:
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
Run Code Online (Sandbox Code Playgroud)
查看此问题的答案:
Ste*_* B. 22
Numeric.product
Run Code Online (Sandbox Code Playgroud)
( 要么
reduce(lambda x,y:x*y,[3,4,5])
Run Code Online (Sandbox Code Playgroud)
)
S.L*_*ott 19
用这个
def prod(iterable):
p = 1
for n in iterable:
p *= n
return p
Run Code Online (Sandbox Code Playgroud)
由于没有内置prod功能.
也许不是“内置”,但我认为它是内置的。反正只是使用 numpy
import numpy
prod_sum = numpy.prod(some_list)
Run Code Online (Sandbox Code Playgroud)