根据序列位置在列表之间创建组合

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 模块中的函数(combinationsproduct 等),但没有得到想要的结果。

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

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