Python的sum()函数返回一个可迭代对象中数字的和。
sum([3,4,5]) == 3 + 4 + 5 == 12
我要找的是返回乘积的函数。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样一个函数存在,但我找不到它。
Python的sum()函数返回一个可迭代对象中数字的和。
sum([3,4,5]) == 3 + 4 + 5 == 12
我要找的是返回乘积的函数。
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
我很确定这样一个函数存在,但我找不到它。
当前回答
numpy中有一个prod()可以完成您所要求的工作。
其他回答
您还可以将您的数字列表编码为pd。然后使用pd.Series.product():
>>> import pandas as pd
>>> pd.Series([5,3,-1]).product()
-15
Numeric.product
(或
reduce(lambda x,y:x*y,[3,4,5])
)
也许不是“内置”,但我认为它是内置的。不管怎样,使用numpy
import numpy
prod_sum = numpy.prod(some_list)
更新:
在Python 3.8中,prod函数被添加到math模块中。看: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()要求所有输入都是正的。
我更喜欢使用functools.reduce()和numpy.prod()的答案上面的答案a和b,但这里有另一个解决方案使用itertools.accumulate():
import itertools
import operator
prod = list(itertools.accumulate((3, 4, 5), operator.mul))[-1]