我有两个清单:
list_a = list_b = list(range(2, 6))
final_list = []
我想知道如何将两个列表中的所有值相乘。我希望我的final_list包含
[2*2, 2*3, 2*4, 2*5, 3*2, 3*3, 3*4, 3*5, 4*2, 4*3, 4*4, 4*5, 5*2, 5*3, 5*4, 5*5]
答案 0 :(得分:9)
您可以使用列表理解:
>>> list_a = list_b = list(range(2, 6))
>>> [x*y for x in list_a for y in list_b]
[4, 6, 8, 10, 6, 9, 12, 15, 8, 12, 16, 20, 10, 15, 20, 25]
请注意list_a = list_b = list(range(2, 6))
使两个变量都指向同一个列表对象。如果不希望这样,请使用单独的列表:
>>> list_a, list_b = list(range(2, 6)), list(range(2, 6))
答案 1 :(得分:5)
itertools.product
可用于从任意数量的迭代中获取笛卡尔积。
import itertools
l1 = range(2,6)
l2 = range(2,6)
result = [x*y for x, y in itertools.product(l1, l2)]
要处理一般情况,您可以使用reduce方法。这适用于任意数量的输入序列。
import functools
import operator
import itertools
result = [functools.reduce(operator.mul, operands)
for operands in itertools.product(l1, l2)]