I am given an n-list-of-lists:
[
[a, b, c],
[p, q, r],
..,
..,
[x, y, z]
]
I am supposed to create a result by choosing one element from each lists. For example, the result for the above example should look like:
[
[a, p, .., x],
[a, p, .., y],
[a, p, .., z],
..
..
[c, r, .., z]
]
How can I implement it without using n-nested for loops? I cannot use n-nested for loops because we do not know the size of input n-list-of-lists until runtime..
itertools.product
was designed for this:
import itertools
data = [
"abc",
"jkl",
"pqr",
"xyz"
]
from pprint import pprint
pprint(list(itertools.product(*data)))
Output:
[('a', 'j', 'p', 'x'),
('a', 'j', 'p', 'y'),
('a', 'j', 'p', 'z'),
('a', 'j', 'q', 'x'),
('a', 'j', 'q', 'y'),
('a', 'j', 'q', 'z'),
('a', 'j', 'r', 'x'),
('a', 'j', 'r', 'y'),
('a', 'j', 'r', 'z'),
('a', 'k', 'p', 'x'),
('a', 'k', 'p', 'y'),
('a', 'k', 'p', 'z'),
('a', 'k', 'q', 'x'),
('a', 'k', 'q', 'y'),
('a', 'k', 'q', 'z'),
('a', 'k', 'r', 'x'),
('a', 'k', 'r', 'y'),
('a', 'k', 'r', 'z'),
('a', 'l', 'p', 'x'),
('a', 'l', 'p', 'y'),
('a', 'l', 'p', 'z'),
('a', 'l', 'q', 'x'),
('a', 'l', 'q', 'y'),
('a', 'l', 'q', 'z'),
('a', 'l', 'r', 'x'),
('a', 'l', 'r', 'y'),
('a', 'l', 'r', 'z'),
('b', 'j', 'p', 'x'),
('b', 'j', 'p', 'y'),
('b', 'j', 'p', 'z'),
('b', 'j', 'q', 'x'),
('b', 'j', 'q', 'y'),
('b', 'j', 'q', 'z'),
('b', 'j', 'r', 'x'),
('b', 'j', 'r', 'y'),
('b', 'j', 'r', 'z'),
('b', 'k', 'p', 'x'),
('b', 'k', 'p', 'y'),
('b', 'k', 'p', 'z'),
('b', 'k', 'q', 'x'),
('b', 'k', 'q', 'y'),
('b', 'k', 'q', 'z'),
('b', 'k', 'r', 'x'),
('b', 'k', 'r', 'y'),
('b', 'k', 'r', 'z'),
('b', 'l', 'p', 'x'),
('b', 'l', 'p', 'y'),
('b', 'l', 'p', 'z'),
('b', 'l', 'q', 'x'),
('b', 'l', 'q', 'y'),
('b', 'l', 'q', 'z'),
('b', 'l', 'r', 'x'),
('b', 'l', 'r', 'y'),
('b', 'l', 'r', 'z'),
('c', 'j', 'p', 'x'),
('c', 'j', 'p', 'y'),
('c', 'j', 'p', 'z'),
('c', 'j', 'q', 'x'),
('c', 'j', 'q', 'y'),
('c', 'j', 'q', 'z'),
('c', 'j', 'r', 'x'),
('c', 'j', 'r', 'y'),
('c', 'j', 'r', 'z'),
('c', 'k', 'p', 'x'),
('c', 'k', 'p', 'y'),
('c', 'k', 'p', 'z'),
('c', 'k', 'q', 'x'),
('c', 'k', 'q', 'y'),
('c', 'k', 'q', 'z'),
('c', 'k', 'r', 'x'),
('c', 'k', 'r', 'y'),
('c', 'k', 'r', 'z'),
('c', 'l', 'p', 'x'),
('c', 'l', 'p', 'y'),
('c', 'l', 'p', 'z'),
('c', 'l', 'q', 'x'),
('c', 'l', 'q', 'y'),
('c', 'l', 'q', 'z'),
('c', 'l', 'r', 'x'),
('c', 'l', 'r', 'y'),
('c', 'l', 'r', 'z')]