例如我有这本字典

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'

最佳答案

您可以在这里使用 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']

关于python - 如何从具有列表值的字典中给定一系列键来检索所有可能的组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14431814/

10-08 23:13