我有以下列表:
list1 = [1, 5, 7, 13, 29, 35, 65, 91, 145, 203, 377, 455, 1015, 1885, 2639, 13195]
Run Code Online (Sandbox Code Playgroud)
如何将列表中的每个数字相乘?例如1 * 5 * 7 * 13 * 29..etc.
我是否正确使用下面的代码?:
for numbs in list1:
numbs * list1[#iterate through list1, starting on 2nd item in list1]
Run Code Online (Sandbox Code Playgroud)
这里最简单的方法是使用一个reduce完全按此操作的操作:
from functools import reduce
import operator
reduce(operator.mul, [1, 2, 3])
>>> 6
Run Code Online (Sandbox Code Playgroud)
Reduce基本上是这样说:将此操作应用于索引0和1.获取结果,然后将操作应用于该结果和索引2.依此类推.
operator.mul 只是用于表示乘法的少量语法糖,它可以很容易地被另一个函数替换.
def multiply(a, b):
return a * b
reduce(multiply, [1,2,3])
Run Code Online (Sandbox Code Playgroud)
这将做同样的事情.
reduce函数在Python 2中作为内置函数提供,但它已被删除,仅在Python 3中的functools中可用.确保导入reduce将确保Python 2/3兼容性.
作为operator模块 和 的替代方案operator.mul,您可以这样做:
一个基本的 for 循环:
list1 = [1,2,3,4,5]
product = 1
for item in list1:
product *= item
print(product) # 120
Run Code Online (Sandbox Code Playgroud)使用numpy模块:
from numpy import prod
list1 = [1,2,3,4,5]
print(prod(list1)) # 120
Run Code Online (Sandbox Code Playgroud)导入functools并应用 lambda 函数:
from functools import reduce
list1 = [1,2,3,4,5]
print(reduce(lambda x, y: x * y, list1)) # 120
Run Code Online (Sandbox Code Playgroud)
或者
from functools import reduce
list1 = [1,2,3,4,5]
prodFunc = lambda x, y: x * y
print(reduce(prodFunc, list1)) # 120
Run Code Online (Sandbox Code Playgroud)
或,不带 lambda:
from functools import reduce
list1 = [1,2,3,4,5]
def prodFunc(a,b):
return a * b
print(reduce(prodFunc, list1)) # 120
Run Code Online (Sandbox Code Playgroud)