我有一个像[[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]]
我考虑过循环,但嵌套循环的数量会根据输入而有所不同。有人可以建议一个好的算法吗?
答案 0 :(得分:5)
你想要的是carthesian product。 itertools
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)]