Python的sum()函数返回一个可迭代对象中数字的和。
sum()
sum([3,4,5]) == 3 + 4 + 5 == 12
我要找的是返回乘积的函数。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样一个函数存在,但我找不到它。
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函数。
prod
它没有内置的,但很容易滚动自己的,如在这里所示:
import operator def prod(factors): return reduce(operator.mul, factors, 1)
请看这个问题的答案:
哪个Python模块适合在列表中进行数据操作?< / >
实际上,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)
numpy中有一个prod()来做你所要求的事情。
prod()
我更喜欢答案<一个 href="https://st一个ckoverflow.com/一个/595409/778533">一个一个>和b上面使用functools.reduce ()和回答使用numpy.prod (),但这里有另一个解决方案使用itertools.accumulate ():
import itertools import operator prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]
在Python 3.8中,刺激函数被添加到数学模块中。看到:math.prod ()。
你要找的函数叫做刺激()或产品(),但是Python没有这个函数。所以,你需要自己编写(这很简单)。
是的,没错。Guido 拒绝了这个想法用于内置prod()函数,因为他认为它很少需要。
正如你所建议的,使用< em > reduce () < / em >和< em > operator.mul () < / em >创建自己的函数并不难:
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中,< em > reduce () < / em >函数被移动到functools模块. c。
顺便说一句,刺激()的主要用途是计算阶乘。我们已经在数学模块中支持它:
>>> 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
注意,日志()的使用要求所有输入都是正的。
也许不是“内置”,但我认为它是内置的。不管怎样,使用numpy
import numpy prod_sum = numpy.prod(some_list)
你也可以将你的数字列表编码为pd.Series,然后使用pd.Series.product():
pd.Series
pd.Series.product()
>>> import pandas as pd >>> pd.Series([5,3,-1]).product() -15