当前位置:  开发笔记 > 编程语言 > 正文

sum()的功能是什么,但乘法?产品()?

如何解决《sum()的功能是什么,但乘法?产品()?》经验,为你挑选了6个好方法。

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

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

我正在寻找返回产品的功能.

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

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



1> ojrac..:

实际上,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)


Guido也不是那种不喜欢`reduce`的人吗?
如果使用Python 3,请使用`functools.reduce`而不是`reduce`.
刚刚在[Guido的博客文章中发现了关于reduce()]的这个金块(http://www.artima.com/weblogs/viewpost.jsp?thread=98196).**"我们已经有了sum();我很乐意交易reduce()for product()......"**.如果有人想请求在标准库中包含`product()`,那么这个问题的观点数量可能有助于说明问题.
这是一个很好的例子,其中有"需要这个",引用Guido:product(filter(None,[1,2,3,None])).希望有一天它会被包括在内.
是的 - 并且reduce甚至不再是Python 3内置的.IMO,当标准(或第三方)库可以做时,我们不需要将所有可能的列表运算符添加到全局内置函数中.你拥有的内置词越多,越常用的词就会成为局部变量名的禁区.

2> Raymond Hett..:
更新:

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

旧信息:Python 3.7及之前版本

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

在prod()上发音

恩,那就对了.Guido 拒绝了内置prod()函数的想法,因为他认为很少需要它.

替代reduce()

正如您所建议的那样,使用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模块,因此您需要添加:

from functools import reduce

具体案例:因子

作为旁注,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()要求所有输入都是正数.



3> zweiterlinde..:

没有一个内置的,但其实很简单推出自己的,这表现在这里:

import operator
def prod(factors):
    return reduce(operator.mul, factors, 1)

查看此问题的答案:

哪个Python模块适合列表中的数据操作?


如果使用Python 3,请使用`functools.reduce`而不是`reduce`.

4> 小智..:

有一个prod()numpy可以满足您的需求.


注意:不支持Python long(任意精度整数),所以`np.prod(range(1,13))`给出的正确答案等于12!但是`np.prod(range(1,14))`没有.
@JasonS`np.prod(arange(1,14,dtype ='object'))`?

5> Steve B...:
Numeric.product 

( 要么

reduce(lambda x,y:x*y,[3,4,5])

)


什么是"数字"?
@CraigMcQueen Numeric是(numpy)的前身之一.
您还必须将r​​educe值设置为1,否则将在null情况下失败.空序列的乘积定义为1.

6> S.Lott..:

用这个

def prod(iterable):
    p = 1
    for n in iterable:
        p *= n
    return p

由于没有内置prod功能.


你必须认为减少真的是反模式:)
@zweiterlinde:对于初学者来说,减少导致问题.在这种情况下,使用`lambda a,b:a*b`,这不是问题.但是,减少并不能很好地概括,并且会被滥用.我更喜欢初学者不学习它.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有