Найти декартово произведение множеств, количество которых неизвестно
Нашел много информации по этой задаче, но так и не смог найти примера ее решения в виде кода на Питоне. Составил несколько черновиков, до конца их не дописал, просто не знаю как все объединить. Вот, собственно, и черновики:
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 шт):
Например так:
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.