两个列表中所有元素的相乘

时间:2018-09-08 16:59:58

标签: python list

我想将list1的每个数字与list2的每个数字相乘。
  例如: [1,2]*[1,2,3]应该返回这样的内容:[1,2,3,2,4,6] 我只想知道是否有任何特殊函数来计算此值,因为使用for循环来计算它会花费很多时间。

3 个答案:

答案 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)