0

I'm trying to create all permutations with variable amount of arguments using list comprehension, I did something:

def create_permutations(iterables):
    n_elements = len(iterables)

    switch = {
    1: lambda: [[i] for i in iterables[0]],

    2: lambda: [[i, j] for i in iterables[0]
                for j in iterables[1]],

    3: lambda: [[i,j,k] for i in iterables[0]
                for j in iterables[1]
                for k in iterables[2]],

    4: lambda: [[i,j,k,x] for i in iterables[0]
                    for j in iterables[1]
                    for k in iterables[2]
                    for x in iterables[3]],

    5: lambda: [[i,j,k,x,y] for i in iterables[0]
                    for j in iterables[1]
                    for k in iterables[2]
                    for x in iterables[3]
                    for y in iterables[4]],
    
    6: lambda: [[i,j,k,x,y,z] for i in iterables[0]
                    for j in iterables[1]
                    for k in iterables[2]
                    for x in iterables[3]
                    for y in iterables[4]
                    for z in iterables[5]],
    
    7: lambda: [[i,j,k,x,y,z,w] for i in iterables[0]
                    for j in iterables[1]
                    for k in iterables[2]
                    for x in iterables[3]
                    for y in iterables[4]
                    for z in iterables[5]
                    for w in iterables[6]]
    }

return switch.get(n_elements, None)

but repeats a lot of code, is possible to improve it.

The iterables argument is a list of lists, for example:

[ [5,4] , [1,2,3,8], [6,-5,2], [-1,-6,4,2] ]

And all permutations are taking one element of each list

  • So you mean Cartesian Product rather than Permutations, don't you? – Orius Feb 11 '22 at 17:56
  • You need to use recursion, but why wouldn't you just use `itertools.product`? Is this a homework assignment? – chepner Feb 11 '22 at 17:57
  • Most of the answers at the linked question use `itertools.product()`, but if you scroll down you'll find some that show how to code it yourself. – Barmar Feb 11 '22 at 18:00

0 Answers0