为列表列表生成交叉产品

ish*_*243 0 python permutation

我有一个类似的python列表[[1 2 3] [4 5] [3] [1]],我想生成所有可能的排列.输出应该是这样的

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

我想到了循环,但嵌套循环的数量会根据输入而变化.有人可以建议一个好的算法吗?

Car*_*ten 5

你想要的是一个carthesian产品.itertools 有一个功能product,完全相同:

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

这输出

[(1, 4, 3, 1),
 (1, 5, 3, 1),
 (2, 4, 3, 1),
 (2, 5, 3, 1),
 (3, 4, 3, 1),
 (3, 5, 3, 1)]
Run Code Online (Sandbox Code Playgroud)