Permutations between two lists of unequal length Permutations between two lists of unequal length python python

Permutations between two lists of unequal length


The simplest way is to use itertools.product:

a = ["foo", "melon"]b = [True, False]c = list(itertools.product(a, b))>> [("foo", True), ("foo", False), ("melon", True), ("melon", False)]


May be simpler than the simplest one above:

>>> a = ["foo", "bar"]>>> b = [1, 2, 3]>>> [(x,y) for x in a for y in b]  # for a list[('foo', 1), ('foo', 2), ('foo', 3), ('bar', 1), ('bar', 2), ('bar', 3)]>>> ((x,y) for x in a for y in b)  # for a generator if you worry about memory or time complexity.<generator object <genexpr> at 0x1048de850>

without any import


Note: This answer is for the specific question asked above. If you are here from Google and just looking for a way to get a Cartesian product in Python, itertools.product or a simple list comprehension may be what you are looking for - see the other answers.


Suppose len(list1) >= len(list2). Then what you appear to want is to take all permutations of length len(list2) from list1 and match them with items from list2. In python:

import itertoolslist1=['a','b','c']list2=[1,2][list(zip(x,list2)) for x in itertools.permutations(list1,len(list2))]

Returns

[[('a', 1), ('b', 2)], [('a', 1), ('c', 2)], [('b', 1), ('a', 2)], [('b', 1), ('c', 2)], [('c', 1), ('a', 2)], [('c', 1), ('b', 2)]]