在Python3中将列表内容相乘的Pythonic方法

时间:2014-09-02 16:01:38

标签: python python-3.x

我注意到这里已经提出过这个问题,但这主要涉及python2: How can I multiply all items in a list together with Python?

随着python3中reduce的消亡(参见What is the problem with reduce()?),将迭代中的数字相乘的最佳方法是什么?

例如。 [1,3,7,1,2] - > 1*3*7*1*2

我现在正在使用这样的东西

def foo(list)
    sum = 1
    for i in list:
        sum *= i
    return sum

我真的很喜欢一个班轮,而不必from functools import reduce

类似于:total = sum(b for a,b in items) 但是用于乘法

1 个答案:

答案 0 :(得分:3)

reduce的主要反对意见似乎是滥用任意减少功能。如果您坚持使用简单的,预先存在的关联运算符,那么就没有理由不使用reduce

from functools import reduce
from operator import mul

x = reduce(mul, [1,3,7,1,2])

您甚至可以更进一步,使用reduce撰写mulfunctools.partial

product = functools.partial(functools.reduce, operator.mul)

x = product(b for a, b in items)