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