#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])