Python3中以Pythonic方式相互乘列表内容

1 投票
1 回答
565 浏览
提问于 2025-04-19 10:19

我注意到这个问题之前已经有人问过了,不过那主要是关于python2的:如何用Python把列表里的所有项相乘?

在python3中,reduce这个功能已经不再推荐使用了(可以看看这个链接: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 个回答

3

大家对 reduce 的主要反对意见似乎是有人用随意的函数来滥用它。如果你使用简单的、已经存在的关联运算符,那就没有理由不使用 reduce

from functools import reduce
from operator import mul

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

你甚至可以更进一步,使用 functools.partial 来组合 reducemul

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

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

撰写回答