Python generates all n substitutions from n lists
I have n lists of different lengths for which I want to create all possible permutations.
those. if a=[1,2]
u b=[3,4,5]
then i would like to get res=[[1,3],[1,4],[1,5],[2,3],[2,4],[2,5]]
i tried to achieve this using a recursive function which turned out to be not very efficient and not very pythonic. How does an experienced python programmer handle the problem?
He called the Cartesian product of two sequences.
It is already available in Python as a library function: . itertools.product
Example:
>>> import itertools
>>> a = [1, 2]
>>> b = [3, 4, 5]
>>> list(itertools.product(a, b))
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]
you can do it with the product function in itertools,
import itertools a = [1,2] b = [3, 4, 5] out = list(itertools.product(a,b)) print out [(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]
itertools is definitely the way to go, but if you don't want to take the easy routes .....
def print_permutations(lists, perms=[]):
if not lists:
print perms
else:
current_layer = lists[0]
remaining_layers = lists[1:]
for word in current_layer:
print_permutations(remaining_layers, perms + [word])
l = (('quick', 'lazy'), ('brown', 'black', 'grey'), ('fox', 'dog'))
print_permutations(l)