Найти декартово произведение множеств, количество которых неизвестно

Нашел много информации по этой задаче, но так и не смог найти примера ее решения в виде кода на Питоне. Составил несколько черновиков, до конца их не дописал, просто не знаю как все объединить. Вот, собственно, и черновики:

from itertools import product

def gams_from_pairs(pairs,result):
    result.append(list(product(pairs)))
    return(result)
from itertools import product

pairs=['Aa','bb','CC','dD']
gams=list(product(pairs))
print(gams)

from itertools import product

def gams_from_pairs(pairs,result):
    for i in range(len(pairs)):
        result.append(list(product(pairs[i])))
    print(result)
    return(result)


pairs=[['A','a'],['b','b'],['C','C'],['d','D']]
result=[]

Нужно решение конкретной задачи: дан массив pairs вида [['Aa'],['bb'],['cC'],['DD']]. На выходе нужно получить комбинации AbcD, AbCD, abcD, abCD в любом порядке. Мне нужно решение в виде кода, а там я разберусь что да как, а то я никак не могу понять решение этого типа задач при неизвестном количестве массивов в pairs. Спасибо.


Ответы (1 шт):

Автор решения: Roman Konoval

Например так:

from itertools import product

pairs=['Aa','bb','CC','dD']
gams=list([''.join(x) for x in product(*pairs)])
print(gams)

product принимает последовательности, которые нужно объединять, как отдельные аргументы, поэтому нужно развернуть список pairs в отдельные аргументы с помощью оператора *. В результате получаются кортежи (tuples), которые можно превратить в строки с помощью string.join.

→ Ссылка