Python 多个列表的组合

Python 多个列表的组合,python,Python,假设我有三个列表: list1 --> [a, b, c, d, e, f, g, h] list2 --> [i, j, k] list3 --> [l, m, n, o, p] 我希望生成所有组合,其中我从列表1获取五个元素,从列表2获取两个元素,从列表3获取三个元素 例如 我试着使用itertools.compositions l1_combinations = itertools.combinations(list1, 5) l2_combinations = ite

假设我有三个列表:

list1 --> [a, b, c, d, e, f, g, h]
list2 --> [i, j, k]
list3 --> [l, m, n, o, p]
我希望生成所有组合,其中我从列表1获取五个元素,从列表2获取两个元素,从列表3获取三个元素

例如

我试着使用itertools.compositions

l1_combinations = itertools.combinations(list1, 5)
l2_combinations = itertools.combinations(list2, 2)
l3_combinations = itertools.combinations(list3, 3)
for l1_iterator in list(l1_combinations):
    for l2_iterator in list(l2_combinations): #added a missing )
        for l3_iterator in list(l3_combinations):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)
但我只在列表3上获得迭代的输出。在所有输出中,只存在列表1中的前五个元素和列表2中的前两个元素。与这两个列表中的其他元素的组合不存在


有人能帮我解释一下我到底错过了什么吗?

在同一个迭代器第一次用完后,不要重复多次。每次迭代一个新的迭代器:

for l1_iterator in itertools.combinations(list1, 5):
    for l2_iterator in itertools.combinations(list2, 2):
        for l3_iterator in itertools.combinations(list3, 3):
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)
或提前列出每一项,以避免重新计算:

l1_combinations = list(itertools.combinations(list1, 5))
l2_combinations = list(itertools.combinations(list2, 2))
l3_combinations = list(itertools.combinations(list3, 3))
for l1_iterator in l1_combinations:
    for l2_iterator in l2_combinations:
        for l3_iterator in l3_combinations:
            sample = l1_iterator + l2_iterator + l3_iterator
            print(sample)

作为重新生成组合列表的替代方案,提前计算组合的乘积;这还可以避免为循环嵌套

from itertools import combinations, product


list1 = list("abcdefgh")
list2 = list("ijk")
list3 = list("lmnop")

l1 = combinations(list1, 5)
l2 = combinations(list2, 2)
l3 = combinations(list3, 3)
for c1, c2, c3 in product(l1, l2, l3):
    sample = c1 + c2 + c3
    print(sample)

我确信列表中l2_迭代器(l2_组合:
中缺少的
没有帮助…有什么解决方案可以避免每次都重新生成组合?
from itertools import combinations, product


list1 = list("abcdefgh")
list2 = list("ijk")
list3 = list("lmnop")

l1 = combinations(list1, 5)
l2 = combinations(list2, 2)
l3 = combinations(list3, 3)
for c1, c2, c3 in product(l1, l2, l3):
    sample = c1 + c2 + c3
    print(sample)