我想将list1的每个数字与list2的每个数字相乘。
例如:
[1,2]*[1,2,3]
应该返回这样的内容:[1,2,3,2,4,6]
我只想知道是否有任何特殊函数来计算此值,因为使用for循环来计算它会花费很多时间。
答案 0 :(得分:3)
一个简单的嵌套comprehension将起作用:
lst1, lst2 = [1, 2], [1, 2, 3]
[x * y for x in lst1 for y in lst2]
# [1, 2, 3, 2, 4, 6]
要从两个列表中获取所有对(笛卡尔乘积),还可以使用itertools.product
:
from itertools import product
[x * y for x, y in product(lst1, lst2)]
# [1, 2, 3, 2, 4, 6]
答案 1 :(得分:1)
您还可以使用numpy
提供的点积来完成此操作(我将其作为答案是因为您说您正在寻找 any 特殊功能,并且正在寻求优化速度,尽管我同意这不是最易读或最直接的方法):
import numpy as np
lst1, lst2 = [1, 2], [1, 2, 3]
np.dot(np.array([lst1]).T, np.array([lst2])).flatten().tolist()
#[1, 2, 3, 2, 4, 6]
答案 2 :(得分:1)
尝试一下:
import itertools
a = [1, 2]
b = [1, 2, 3]
result = []
for n in a:
m = map(lambda x,y: x*y, b, itertools.repeat(n))
result.extend(m)