根据序列位置

时间:2017-02-07 13:53:39

标签: python python-2.7 itertools cartesian-product

我正在尝试通过在已知的蛋白质序列中改组保守基序来创建序列。

例如:

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模块中的函数(combinationsproduct等),并且没有任何内容可以提供所需的结果。

我是编程的新手,可能有一些非常明显的东西,我错过了......

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您正在寻找每个列表的分组元素的笛卡尔积。为此,我们可以在将序列压缩在一起后使用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')]