除了乘法,sum()函数是什么样的?产品()?

2024-09-29 00:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

Python的^{}函数返回iterable中的数字之和

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

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

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

我很确定这样一个函数存在,但我找不到它


Tags: 函数产品数字iterablesumsomelibsomefunc
3条回答

更新:

在Python3.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  # Required in Python 3
import operator
def prod(iterable):
    return reduce(operator.mul, iterable, 1)

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

注意,在Python 3中,reduce()函数被移动到了functools module

特殊情况:阶乘

作为旁注,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()的使用要求所有输入均为正

在numpy有一个^{}能满足你的要求

实际上,圭多否决了这个想法: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)

相关问题 更多 >