itertools: Cartesian product of permutations
Question: Using pythons `itertools`, I'd like to create an iterator over the outer
product of all permutations of a bunch of lists. An explicit example:

    
    
    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
    

While this works, I'd like to generalize it to an arbitrary list of lists. I
tried:

    
    
    for x in itertools.product(map(itertools.permutations,[A,B,C])):
        print x
    

but it did not do what I intended. The expected output is:

    
    
    ((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))
    


Answer: You missed the `*` to unpack the list into 3 arguments

    
    
    itertools.product(*map(itertools.permutations,[A,B,C]))
    

