Создание комбинаций между списками на основе позиции последовательности
Я пытаюсь создать последовательности из перетасовки сохраненных мотивов в известных последовательностях белков.
Например:
seq1 = ['ABC', 'DEF', 'GHI']
seq2 = ['JKL', 'MNO', 'PUR']
seq3 = ['QRS', 'TUV' 'WXY']
Результат, который я ищу, таков:
ABC DEF PUR
ABC DEF WXY
ABC MNO GHI
ABC MNO WXY
ABC MNO PUR
JKL MNO GHI
JKL MNO WXY
JKL DEF GHI
JKL DEF WXY
JKL DEF PUR
...
В общей сложности 3^3 комбинации.
Я уже пробовал использовать функции в модуле itertools(combinations
, product
, и т.д.) и ничего не дает желаемого результата.
Я новичок в программировании, возможно, есть что-то очень очевидное, чего мне не хватает...
1 ответ:
Если я правильно понял, вы ищете декартово произведение сгруппированных элементов каждого списка. Для этого мы можем использовать
itertools.product
после того, как вы соедините последовательности вместе.In[1]: from itertools import product, izip In[2]: seq1 = ['ABC', 'DEF', 'GHI'] In[3]: seq2 = ['JKL', 'MNO', 'PUR'] In[4]: seq3 = ['QRS', 'TUV', 'WXY'] In[5]: list(product(*izip(seq1, seq2, seq3))) Out[5]: [('ABC', 'DEF', 'GHI'), ('ABC', 'DEF', 'PUR'), ('ABC', 'DEF', 'WXY'), ('ABC', 'MNO', 'GHI'), ('ABC', 'MNO', 'PUR'), ('ABC', 'MNO', 'WXY'), ('ABC', 'TUV', 'GHI'), ('ABC', 'TUV', 'PUR'), ('ABC', 'TUV', 'WXY'), ('JKL', 'DEF', 'GHI'), ('JKL', 'DEF', 'PUR'), ('JKL', 'DEF', 'WXY'), ('JKL', 'MNO', 'GHI'), ('JKL', 'MNO', 'PUR'), ('JKL', 'MNO', 'WXY'), ('JKL', 'TUV', 'GHI'), ('JKL', 'TUV', 'PUR'), ('JKL', 'TUV', 'WXY'), ('QRS', 'DEF', 'GHI'), ('QRS', 'DEF', 'PUR'), ('QRS', 'DEF', 'WXY'), ('QRS', 'MNO', 'GHI'), ('QRS', 'MNO', 'PUR'), ('QRS', 'MNO', 'WXY'), ('QRS', 'TUV', 'GHI'), ('QRS', 'TUV', 'PUR'), ('QRS', 'TUV', 'WXY')]