Есть ли способ создавать комбинации, которые сохраняют порядок элементов в списке?

#python-3.x #combinations

#python-3.x #комбинации

Вопрос:

У меня есть функция, которая предоставляет мне список списков. Длина списка соответствует длине комбинации, в то время как длина подсписка соответствует различным буквам, которые могут использоваться в этой позиции. Так, например, ожидаемыми комбинациями для этого списка [['W'], ['I'], ['C', 'J'], ['K', 'Y']] являются «WICK», «WICY», «WIJK» и «WIJY». Я знаю, как генерировать эти комбинации, используя вложенные циклы for следующим образом:

 for a in lst[0]:
    for b in lst[1]:
        for c in lst[2]:
            for d in lst[3]:
                print(a b c d) 
  

Однако, поскольку длина каждого списка может отличаться, выполнение этого вручную для моей программы невозможно. Есть ли способ, которым я могу сделать это автоматически?

Ответ №1:

Я думаю, что вы ищете продукт (сокращение от декартова произведения), который находится в модуле itertools. Вы можете прочитать об этом здесь.

Вот пример кода:

 import itertools as it
data = [['W'], ['I'], ['C', 'J'], ['K', 'Y']] #not a very good variable name
combos = list(it.product(*data)) 
  

Ответ №2:

Это жестко, учитывая 4 элемента в родительском списке # Согласно Qn

 lst = [['W'], ['I'], ['C', 'J'], ['K', 'Y']]

for a in range(len(lst[0])):
    for b in range(len(lst[1])):
        for c in range(len(lst[2])):
            for d in range(len(lst[3])):
                print(lst[0][a] lst[1][b] lst[2][c] lst[3][d])