除了乘法之外,类似于 sum() 的函数是什么?产品()?
题
蟒蛇的 sum()
函数返回可迭代对象中数字的总和。
sum([3,4,5]) == 3 + 4 + 5 == 12
我正在寻找返回产品的函数。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样的功能存在,但我找不到它。
解决方案
实际上,圭否决的想法: 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)
其他提示
的更新强>
在Python 3.8,所述的刺功能加入到数学模块。请参阅: math.prod()
旧版信息:Python的3.7和前
您正在寻找将被调用的函数的 PROD()的或产品()的但是Python不具备该功能。所以,你需要编写自己的(很简单)。
上PROD宣告()
是的,这是正确的。圭多拒绝了内置PROD()函数的想法,因为他认为这是很少用到。
替代与减少()
如你所说,这是不难使用,使自己的的减少() 和 运算符。 MUL() :
from functools import reduce
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
在Python 3里, 减少() 功能被移到了 functools模块,所以你需要添加:
from functools import reduce
具体情况下:阶乘
作为边注,主激励用例 PROD()的是计算阶乘。我们已经为在数学模块支持:
>>> import math
>>> math.factorial(10)
3628800
替代的,对数
如果您的数据由浮体,则可以使用计算产品的总和()与指数和对数:
>>> 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
请注意,使用的的日志()的要求所有输入是正的。
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
请参阅这个问题的答案:
有一个 prod()
在numpy的是什么一样你问。
Numeric.product
(或
reduce(lambda x,y:x*y,[3,4,5])
)
使用此
def prod(iterable):
p = 1
for n in iterable:
p *= n
return p
既然没有内置prod
功能。
我更喜欢答案 A 和 乙 上面使用 functools.reduce() 和 回答 使用 numpy.prod(), ,但这里还有另一个使用的解决方案 itertools.accumulate():
import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]
也许不是一个“内置”,但我认为它内置。反正只使用numpy的
import numpy
prod_sum = numpy.prod(some_list)
不隶属于 StackOverflow