Создание комбинаций между списками на основе позиции последовательности


Я пытаюсь создать последовательности из перетасовки сохраненных мотивов в известных последовательностях белков.

Например:

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 2

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