The pythonic way to generate pairs The pythonic way to generate pairs python python

The pythonic way to generate pairs


These are not really "combinations" in the sense of combinatorics, these are rather elements from the cartesian product of a and b. The function in the standard library to generate these pairs is itertools.product():

for i, j in itertools.product(a, b):    # whatever


As @Sven said, your code is attempting to get all ordered pairs of elements of the lists a and b. In this case itertools.product(a,b) is what you want. If instead you actually want "combinations", which are all unordered pairs of distinct elements of the list a, then you want itertools.combinations(a,2).

>>> for pair in itertools.combinations([1,2,3,4],2):...    print pair...(1, 2)(1, 3)(1, 4)(2, 3)(2, 4)(3, 4)


The itertools library has combinatorics functions. Like Sven stated, itertools.product would be the appropriate function in this case:

list(itertools.product('ab', 'cd'))[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]