# Printing combinations of two lists in Python

Stack Overflow Asked on January 3, 2022

What I’m trying to print is the following, using 2 variables in each string for simplicity. I think something’s wrong using the loops, i’m kinda new to Python. Thanks in advance!

com0 <-(a) with (1,)
com1 <-(a) with (2,)
com2 <-(a) with (1, 2)
com3 <-(b) with (1,)
com4 <-(b) with (2,)
com5 <-(b) with (1, 2)
com6 <-(a,b) with (1,)
com7 <-(a,b) with (2,)
com8 <-(a,b) with (1, 2)


This is what I’ve tried:

import itertools

i = 0 #v1
j = 0 #v2

v1 = [1, 2]
v2 = ["a","b"]

while j < 2**len(v2):

for K in range(0, len(v2)+1):

while i < 2**len(v1):

for L in range(0, len(v1)+1):

for subset2 in itertools.combinations(v1, L):

for subset1 in itertools.combinations(v2, K):

print("com{0} <-{1} with {2}".format(i,subset1,subset2))

i+=1
j+=1


You dont need these many loops for this. Just use combinations and product from itertoools

>>> from itertools import combinations, product
>>>
>>> v1 = [1, 2]
>>> v2 = ["a","b"]
>>>
>>> all_v1 = [e for i in range(len(v1)) for e in combinations(v1,i+1)]
>>> all_v2 = [e for i in range(len(v1)) for e in combinations(v2,i+1)]
>>>
>>> for i, (x,y) in enumerate(product(all_v2, all_v1)):
...     print (f'com{i} <-{x} with {y}')
...
com0 <-('a',) with (1,)
com1 <-('a',) with (2,)
com2 <-('a',) with (1, 2)
com3 <-('b',) with (1,)
com4 <-('b',) with (2,)
com5 <-('b',) with (1, 2)
com6 <-('a', 'b') with (1,)
com7 <-('a', 'b') with (2,)
com8 <-('a', 'b') with (1, 2)


Answered by Prem Anand on January 3, 2022

The product() from itertools results in the Cartesian product of the two lists. By using this function you avoid all the loops:

import itertools

v1 = [1, 2]
v2 = ["a","b"]
combinations = list(itertools.product(v1, v2))
>> [(1, "a"), (1, "b"), (2, "a"), (2, "b")]


Answered by Bram Dekker on January 3, 2022