2024-09-28 20:19:53 发布
网友
Python的^{}函数返回iterable中的数字和。
sum([3,4,5]) == 3 + 4 + 5 == 12
我正在寻找返回产品的函数。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样一个函数存在,但我找不到它。
没有一个内置的,但很容易滚动自己的,如here:
import operator def prod(factors): return reduce(operator.mul, factors, 1)
请参阅此问题的答案:
Which Python module is suitable for data manipulation in a list?
在Python 3.8中,prod函数被添加到math模块中。见:math.prod()。
您要查找的函数将被调用prod()或product(),但Python没有该函数。所以,你需要自己写(这很容易)。
是的,没错。内置prod()函数的Guidorejected the idea,因为他认为很少需要它。
正如您所建议的,使用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
顺便说一下,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()需要所有输入都是正的。
实际上,吉多否决了这个想法: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)
没有一个内置的,但很容易滚动自己的,如here:
请参阅此问题的答案:
Which Python module is suitable for data manipulation in a list?
更新:
在Python 3.8中,prod函数被添加到math模块中。见:math.prod()。
旧信息:Python3.7及之前版本
您要查找的函数将被调用prod()或product(),但Python没有该函数。所以,你需要自己写(这很容易)。
在prod()上发音
是的,没错。内置prod()函数的Guidorejected the idea,因为他认为很少需要它。
使用reduce()替代
正如您所建议的,使用reduce()和operator.mul()创建自己的应用程序并不难:
在Python 3中,reduce()函数被移到了functools module,因此需要添加:
具体情况:阶乘
顺便说一下,prod()的主要动机用例是计算阶乘。我们已经在math module中得到了支持:
带对数的备选方案
如果数据由浮点组成,则可以使用带指数和对数的sum()计算乘积:
注意,使用log()需要所有输入都是正的。
实际上,吉多否决了这个想法:http://bugs.python.org/issue1093
但是,正如本期所述,你可以很容易地做到:
相关问题 更多 >
编程相关推荐