In [1]:
import itertools
import pprint

In [2]:
l1 = ['a', 'b', 'c']
l2 = ['X', 'Y', 'Z']

In [3]:
p = itertools.product(l1, l2)

In [4]:
print(p)


<itertools.product object at 0x1026edd80>

In [5]:
print(type(p))


<class 'itertools.product'>

In [6]:
for v in p:
    print(v)


('a', 'X')
('a', 'Y')
('a', 'Z')
('b', 'X')
('b', 'Y')
('b', 'Z')
('c', 'X')
('c', 'Y')
('c', 'Z')

In [7]:
for v in p:
    print(v)

In [8]:
for v1, v2 in itertools.product(l1, l2):
    print(v1, v2)


a X
a Y
a Z
b X
b Y
b Z
c X
c Y
c Z

In [9]:
for v1 in l1:
    for v2 in l2:
        print(v1, v2)


a X
a Y
a Z
b X
b Y
b Z
c X
c Y
c Z

In [10]:
l_p = list(itertools.product(l1, l2))

In [11]:
pprint.pprint(l_p)


[('a', 'X'),
 ('a', 'Y'),
 ('a', 'Z'),
 ('b', 'X'),
 ('b', 'Y'),
 ('b', 'Z'),
 ('c', 'X'),
 ('c', 'Y'),
 ('c', 'Z')]

In [12]:
print(type(l_p))


<class 'list'>

In [13]:
print(type(l_p[0]))


<class 'tuple'>

In [14]:
t = ('one', 'two')
d = {'key1': 'value1', 'key2': 'value2'}
r = range(2)

In [15]:
l_p = list(itertools.product(t, d, r))

In [16]:
pprint.pprint(l_p)


[('one', 'key1', 0),
 ('one', 'key1', 1),
 ('one', 'key2', 0),
 ('one', 'key2', 1),
 ('two', 'key1', 0),
 ('two', 'key1', 1),
 ('two', 'key2', 0),
 ('two', 'key2', 1)]

In [17]:
l1 = ['a', 'b']

In [18]:
pprint.pprint(list(itertools.product(l1, repeat=3)))


[('a', 'a', 'a'),
 ('a', 'a', 'b'),
 ('a', 'b', 'a'),
 ('a', 'b', 'b'),
 ('b', 'a', 'a'),
 ('b', 'a', 'b'),
 ('b', 'b', 'a'),
 ('b', 'b', 'b')]

In [19]:
pprint.pprint(list(itertools.product(l1, l1, l1)))


[('a', 'a', 'a'),
 ('a', 'a', 'b'),
 ('a', 'b', 'a'),
 ('a', 'b', 'b'),
 ('b', 'a', 'a'),
 ('b', 'a', 'b'),
 ('b', 'b', 'a'),
 ('b', 'b', 'b')]

In [20]:
l1 = ['a', 'b']
l2 = ['X', 'Y']

In [21]:
pprint.pprint(list(itertools.product(l1, l2, repeat=2)))


[('a', 'X', 'a', 'X'),
 ('a', 'X', 'a', 'Y'),
 ('a', 'X', 'b', 'X'),
 ('a', 'X', 'b', 'Y'),
 ('a', 'Y', 'a', 'X'),
 ('a', 'Y', 'a', 'Y'),
 ('a', 'Y', 'b', 'X'),
 ('a', 'Y', 'b', 'Y'),
 ('b', 'X', 'a', 'X'),
 ('b', 'X', 'a', 'Y'),
 ('b', 'X', 'b', 'X'),
 ('b', 'X', 'b', 'Y'),
 ('b', 'Y', 'a', 'X'),
 ('b', 'Y', 'a', 'Y'),
 ('b', 'Y', 'b', 'X'),
 ('b', 'Y', 'b', 'Y')]

In [22]:
pprint.pprint(list(itertools.product(l1, l2, l1, l2)))


[('a', 'X', 'a', 'X'),
 ('a', 'X', 'a', 'Y'),
 ('a', 'X', 'b', 'X'),
 ('a', 'X', 'b', 'Y'),
 ('a', 'Y', 'a', 'X'),
 ('a', 'Y', 'a', 'Y'),
 ('a', 'Y', 'b', 'X'),
 ('a', 'Y', 'b', 'Y'),
 ('b', 'X', 'a', 'X'),
 ('b', 'X', 'a', 'Y'),
 ('b', 'X', 'b', 'X'),
 ('b', 'X', 'b', 'Y'),
 ('b', 'Y', 'a', 'X'),
 ('b', 'Y', 'a', 'Y'),
 ('b', 'Y', 'b', 'X'),
 ('b', 'Y', 'b', 'Y')]