如何从 python 元组列表中获取所有可能的组合

How to get all possible combinations from python list of tuples

我有一个这样的列表..

[
    [
        ("a", 1)
    ] ,
    [
        ("b", 2)
    ],
    [
        ("c", 3),
        ("d", 4)
    ],
    [
        ("e", 5),
        ("f", 6),
        ("g", 7)
    ]
    
]

我正在尝试从此列表数据中获取所有可能的组合。

我的预期输出应该如下所示。

[
    [
        ("a", 1),
        ("b", 2),
        ("c", 3),
        ("e", 5)
    ],
        [
        ("a", 1),
        ("b", 2),
        ("c", 3),
        ("f", 6)
    ],
    [
        ("a", 1),
        ("b", 2),
        ("c", 3),
        ("g", 7)
    ],
    [
        ("a", 1),
        ("b", 2),
        ("d", 4),
        ("e", 5)
    ],
    [
        ("a", 1),
        ("b", 2),
        ("d", 4),
        ("f", 6)
    ],
    [
        ("a", 1),
        ("b", 2),
        ("d", 4),
        ("g", 7)
    ],
]

我试过 itertools.combinations 但我无法获得预期的输出,不确定我遗漏了什么,无法找到逻辑,请帮忙。提前致谢。

如果您需要任何其他信息,请告诉我,

提前致谢,

你想要 itertools.product,而不是 itertools.combinations。每个元组列表应该是 product 的一个参数,因此使用 * 运算符将起始列表的每个元素作为参数传递:

>>> import itertools
>>> list(itertools.product(*lists_of_tuples))
[(('a', 1), ('b', 2), ('c', 3), ('e', 5)), (('a', 1), ('b', 2), ('c', 3), ('f', 6)), (('a', 1), ('b', 2), ('c', 3), ('g', 7)), (('a', 1), ('b', 2), ('d', 4), ('e', 5)), (('a', 1), ('b', 2), ('d', 4), ('f', 6)), (('a', 1), ('b', 2), ('d', 4), ('g', 7))]

我认为 itertools.products() 应该有效
同样,如果您希望将结果作为 2d 列表,这应该可以正常工作。

[list(x) for x in itertools.product(*li)]  # li is your list

如果你真的想使用组合,并得到显示的输出格式,你可以这样做

from itertools import combinations

input_list = [
    [("a", 1)],
    [("b", 2)],
    [("c", 3), ("d", 4)],
    [("e", 5), ("f", 6), ("g", 7)],
]

list_for_combos = [i[n] for i in input_list for n, _ in enumerate(i)]

combos = list(
    [combo[n] for n, _ in enumerate(combo)]
    for combo in combinations(list_for_combos, 4)
)