itertools:排列的笛卡尔乘积

Hoo*_*ked 3 python permutation cartesian-product python-itertools

使用pythons itertools,我想在一堆列表的所有排列的外积上创建一个迭代器.一个明确的例子:

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

for x in itertools.product(itertools.permutations(A),itertools.permutations(B),itertools.permutations(C)):
    print x
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我想将其推广到任意列表列表.我试过了:

for x in itertools.product(map(itertools.permutations,[A,B,C])):
    print x
Run Code Online (Sandbox Code Playgroud)

但它并没有按照我的意图行事.预期的产出是:

((1, 2, 3), (4, 5), (6, 7))
((1, 2, 3), (4, 5), (7, 6))
((1, 2, 3), (5, 4), (6, 7))
((1, 2, 3), (5, 4), (7, 6))
((1, 3, 2), (4, 5), (6, 7))
((1, 3, 2), (4, 5), (7, 6))
((1, 3, 2), (5, 4), (6, 7))
((1, 3, 2), (5, 4), (7, 6))
((2, 1, 3), (4, 5), (6, 7))
((2, 1, 3), (4, 5), (7, 6))
((2, 1, 3), (5, 4), (6, 7))
((2, 1, 3), (5, 4), (7, 6))
((2, 3, 1), (4, 5), (6, 7))
((2, 3, 1), (4, 5), (7, 6))
((2, 3, 1), (5, 4), (6, 7))
((2, 3, 1), (5, 4), (7, 6))
((3, 1, 2), (4, 5), (6, 7))
((3, 1, 2), (4, 5), (7, 6))
((3, 1, 2), (5, 4), (6, 7))
((3, 1, 2), (5, 4), (7, 6))
((3, 2, 1), (4, 5), (6, 7))
((3, 2, 1), (4, 5), (7, 6))
((3, 2, 1), (5, 4), (6, 7))
((3, 2, 1), (5, 4), (7, 6))
Run Code Online (Sandbox Code Playgroud)

JBe*_*rdo 12

您错过了*将列表解压缩为3个参数

itertools.product(*map(itertools.permutations,[A,B,C]))
Run Code Online (Sandbox Code Playgroud)