根据序列位置在列表之间创建组合
Create combinations between lists based on sequence position
我正在尝试通过改组已知蛋白质序列中的保守基序来创建序列。
例如:
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
等),但没有得到想要的结果。
我是编程新手,可能我遗漏了一些非常明显的东西...
如果我没理解错的话,你正在寻找每个列表的分组元素的笛卡尔积。为此,我们可以在将序列压缩在一起后使用 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')]
我正在尝试通过改组已知蛋白质序列中的保守基序来创建序列。
例如:
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
等),但没有得到想要的结果。
我是编程新手,可能我遗漏了一些非常明显的东西...
如果我没理解错的话,你正在寻找每个列表的分组元素的笛卡尔积。为此,我们可以在将序列压缩在一起后使用 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')]