使用Python实现列表列表的组合

问题描述 投票:0回答:1

我得到了一个 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 的大小..

python recursion combinations depth-first-search
1个回答
0
投票

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')]
© www.soinside.com 2019 - 2024. All rights reserved.