我得到了一个 n-list-of-lists:
[
[a, b, c],
[p, q, r],
..,
..,
[x, y, z]
]
我应该通过从每个列表中选择一个元素来创建结果。例如,上面示例的结果应如下所示:
[
[a, p, .., x],
[a, p, .., y],
[a, p, .., z],
..
..
[c, r, .., z]
]
如何在不使用n嵌套for循环的情况下实现它?我无法使用 n 嵌套 for 循环,因为我们直到运行时才知道输入 n-list-of-lists 的大小..
itertools.product
专为此目的:
import itertools
data = [
"abc",
"jkl",
"pqr",
"xyz"
]
from pprint import pprint
pprint(list(itertools.product(*data)))
输出:
[('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')]