如何获取列表,该列表是许多列表的笛卡尔积

时间:2019-06-23 08:34:20

标签: python list

我有N个列表(或集合),N个我不知道。我必须从每个列表访问一个元素以检查条件。

例如,如果

A = [1, 2, 3] 
B = [5, 6]  
c = [6, 7] 

我的组合为 [(1,5,6), (1,5,7), (1,6,6), (1,6, 7), (2, 5, 6) and so on...]

如何有效地做到这一点?

list1 = [(i, j, k) for i in listx for j in listy for k in listz]

为已知的N(此处为3)工作;对于未知N怎么办?

2 个答案:

答案 0 :(得分:0)

您完全是在描述笛卡尔积 尝试itertools.product

from itertools import product

A = [1, 2, 3]
B = [5, 6]
C = [6, 7]

print(list(product(A,B,C)))


答案 1 :(得分:0)

您可以将itertools中的产品用于任意数量的列表:

from itertools import product
lists = [[1, 2, 3], [3,2,1],[2,3],[1,5,4]]
print([*product(*lists)])
# [(1, 3, 2, 1), (1, 3, 2, 5), (1, 3, 2, 4) ...