我正在尝试通过在已知的蛋白质序列中改组保守基序来创建序列。
例如:
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
等),并且没有任何内容可以提供所需的结果。
我是编程的新手,可能有一些非常明显的东西,我错过了......
答案 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')]