4

例如,我有这本词典

d={'M':['ATG'],'D':['GAC','GAT'],'E':['GAA','GAG']}

在给定一系列键的情况下,我希望作为输出的是一个包含所有可能序列的列表。(也可以是一个字符串,其中所有可能的序列都在单独的行“\n”中)

sequence = "MDE" 

因此,输出应如下所示:

['ATGGACGAA','ATGGACGAG','ATGGATGAA','ATGGATGAG']

到目前为止我尝试过的是以下内容,但当然这不是我想要的:

seq_trans = ''

for aa in sequence:
  for k, v in d.iteritems():
    if k == aa:
      for item in v:
        seq_trans= seq_trans + item
print seq_trans

我得到的“MDE”是:

'ATGGACGATGAAGAG'
4

1 回答 1

7

你可以 itertools.product在这里使用,它返回输入迭代的笛卡尔积。

In [78]: seq="MED"

In [79]: ["".join(x) for x in product(*(d[y] for y in seq))]
Out[79]: ['ATGGAAGAC', 'ATGGAAGAT', 'ATGGAGGAC', 'ATGGAGGAT']
于 2013-01-21T02:47:31.887 回答