为列表列表生成交叉产品

时间:2014-03-27 10:17:25

标签: python permutation

我有一个像[[1 2 3] [4 5] [3] [1]]这样的python列表,我希望生成所有可能的排列。输出应该是

[[1 4 3 1] [1 5 3 1] [2 4 3 1] [2 5 3 1] [3 4 3 1] [3 5 3 1]]

我考虑过循环,但嵌套循环的数量会根据输入而有所不同。有人可以建议一个好的算法吗?

1 个答案:

答案 0 :(得分:5)

你想要的是carthesian productitertools has a function product就是这样做的:

import itertools
a = [[1, 2, 3], [4, 5], [3], [1]]
p = itertools.product(*a)
print list(p)

此输出

[(1, 4, 3, 1),
 (1, 5, 3, 1),
 (2, 4, 3, 1),
 (2, 5, 3, 1),
 (3, 4, 3, 1),
 (3, 5, 3, 1)]