sum()的功能是什么,但乘法?产品()?

时间:2009-02-27 16:06:36

标签: python product built-in pep

Python的sum()函数返回迭代中的数字总和。

sum([3,4,5]) == 3 + 4 + 5 == 12

我正在寻找返回产品的功能。

somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60

我很确定这样的功能存在,但我找不到它。

8 个答案:

答案 0 :(得分:200)

实际上,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)

答案 1 :(得分:40)

没有内置的内容,但展示自己的内容很简单,如here所示:

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

查看这个问题的答案:

Which Python module is suitable for data manipulation in a list?

答案 2 :(得分:36)

更新

在Python 3.8中, prod 函数已添加到 math 模块中。请参阅:math.prod()

旧信息:Python 3.7和之前的

您正在寻找的功能将被称为 prod() product(),但Python没有该功能。所以,你需要自己编写(这很容易)。

prod()上的发音

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

替代reduce()

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

from functools import reduce
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

注意,使用 log()要求所有输入都是正数。

答案 3 :(得分:35)

numpy中有一个prod()可以满足您的要求。

答案 4 :(得分:22)

Numeric.product 

(或

reduce(lambda x,y:x*y,[3,4,5])

答案 5 :(得分:16)

使用此

def prod(iterable):
    p = 1
    for n in iterable:
        p *= n
    return p

由于没有内置prod功能。

答案 6 :(得分:2)

我更喜欢上面的答案ab使用functools.reduce()answer使用numpy.prod(),但这是使用itertools.accumulate()的另一种解决方案}:

import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]

答案 7 :(得分:1)

也许不是“内置”,但我认为它是内置的。无论如何,只要使用numpy

import numpy 
prod_sum = numpy.prod(some_list)