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