蟒蛇的 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)

请参阅这个问题的答案:

哪一种Python模块适用于数据操纵列表?

有一个 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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top