python中两个列表的笛卡尔积

时间:2018-09-05 20:19:46

标签: python

Python中两个列表的笛卡尔积

list1 = ['a', 'b']
list2 = [1, 2, 3, 4, 5]

预期输出:

list3 = ['a1', 'a2', 'a3', 'a4', 'a5', 'b1', 'b2', 'b3', 'b4', 'b5']

4 个答案:

答案 0 :(得分:5)

进行列表理解,遍历两个列表并添加字符串,例如

list3 = [i+str(j) for i in list1 for j in list2]

答案 1 :(得分:1)

您可以使用itertools.product函数:

from itertools import product

list3 = [a+str(b) for a, b in product(list1, list2)]

答案 2 :(得分:0)

如果您不熟悉列表理解,还可以使用

list3 = []
for l in list1:
    for b in list2:
        list3.append(l + b)
print list3

这将做同样的事情,但是从上面使用列表理解将是最好的方法

答案 3 :(得分:0)

如果您使用的是Python 3.6+,则可以按以下方式使用f字符串:

list3 = [f'{a}{b}' for a in list1 for b in list2]

我真的很喜欢这种表示法,因为它可读性强,并且与笛卡尔积的定义匹配。

如果您想要更复杂的代码,可以使用itertools.product

import itertools

list3 = [f'{a}{b}' for a, b in itertools.product(list1, list2)]

我检查了性能,看来列表理解比itertools版本运行得快。