2017-02-07 2 views
2

J'essaie de créer des séquences à partir de la réorganisation de motifs conservés dans des séquences connues de protéines.Créer des combinaisons entre les listes en fonction de la position de la séquence

Par exemple:

seq1 = ['ABC', 'DEF', 'GHI'] 
seq2 = ['JKL', 'MNO', 'PUR'] 
seq3 = ['QRS', 'TUV' 'WXY'] 

Le résultat que je cherche est:

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 
... 

pour un total de 3^3 combinaisons.

J'ai déjà essayé d'utiliser des fonctions dans le module itertools (combinations, product, etc.) et rien ne donne le résultat souhaité.

Je suis nouveau à la programmation il peut y avoir quelque chose de très évident que je manque ...

Répondre

4

Si je comprends bien, vous êtes à la recherche du produit cartésien des éléments regroupés de chaque liste. Pour cela, nous pouvons utiliser itertools.product après avoir compressé les séquences ensemble.

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