我有以下列表:
Property
如何将列表中的每个数字相乘?例如list1 = [1, 5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 1885, 2639, 13195]
。
我是否使用下面的代码在正确的轨道上?:
1 * 5 * 7 * 13 * 29..etc
答案 0 :(得分:8)
这里最简单的方法是使用reduce
操作来完成这个:
from functools import reduce
import operator
reduce(operator.mul, [1, 2, 3])
>>> 6
Reduce基本上是这样说:将此操作应用于索引0和1.获取结果,然后将操作应用于该结果和索引2.依此类推。
operator.mul
只是用于表示乘法的少量语法糖,它可以很容易地用另一个函数替换。
def multiply(a, b):
return a * b
reduce(multiply, [1,2,3])
这将完全相同。
reduce函数在Python 2中可用,但是it was removed and is only available in functools in Python 3。确保导入reduce将确保Python 2/3的兼容性。
答案 1 :(得分:3)
作为operator
模块和operator.mul
的替代方案,您可以执行以下操作:
一个基本的for循环:
list1 = [1,2,3,4,5]
product = 1
for item in list1:
product *= item
print(product) # 120
使用numpy
模块:
from numpy import prod
list1 = [1,2,3,4,5]
print(prod(list1)) # 120
导入functools
并应用lambda函数:
from functools import reduce
list1 = [1,2,3,4,5]
print(reduce(lambda x, y: x * y, list1)) # 120
或强>
from functools import reduce
list1 = [1,2,3,4,5]
prodFunc = lambda x, y: x * y
print(reduce(prodFunc, list1)) # 120
或,没有lambda:
from functools import reduce
list1 = [1,2,3,4,5]
def prodFunc(a,b):
return a * b
print(reduce(prodFunc, list1)) # 120