小编典典

sum() 之类的函数是什么,但用于乘法?产品()?

all

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

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

我正在寻找返回产品的函数。

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

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


阅读 80

收藏
2022-05-27

共1个答案

小编典典

更新:

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

旧信息:Python 3.7 和更早版本

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

prod() 上的声明

是的,这是正确的。Guido拒绝了内置 prod()
函数的想法,因为他认为它很少需要。

使用 reduce() 替代

正如您所建议的,使用reduce()

operator.mul()

自己制作并不难:

from functools import reduce  # Required in Python 3
import operator
def prod(iterable):
    return reduce(operator.mul, iterable, 1)

>>> prod(range(1, 5))
24

请注意,在 Python 3 中,
reduce()

函数已移至functools 模块

具体案例:阶乘

附带说明一下, prod()
的主要激励用例是计算阶乘。我们已经在数学模块中提供了支持:

>>> 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() 要求所有输入都是正数。

2022-05-27