Python 如何从具有列表值的字典中检索给定键序列的所有可能组合
例如,我有这本字典Python 如何从具有列表值的字典中检索给定键序列的所有可能组合,python,biopython,Python,Biopython,例如,我有这本字典 d={'M':['ATG'],'D':['GAC','GAT'],'E':['GAA','GAG']} 给定一个键序列,我想要的输出是一个包含所有可能序列的列表。(也可以是字符串,其中所有可能的序列都在单独的行中“\n”) 因此,输出应如下所示: ['ATGGACGAA','ATGGACGAG','ATGGATGAA','ATGGATGAG'] 到目前为止,我尝试了以下内容,但这当然不是我想要的: seq_trans = '' for aa in sequence:
d={'M':['ATG'],'D':['GAC','GAT'],'E':['GAA','GAG']}
给定一个键序列,我想要的输出是一个包含所有可能序列的列表。(也可以是字符串,其中所有可能的序列都在单独的行中“\n”)
因此,输出应如下所示:
['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”中得到的是:
您可以在这里使用,它返回输入iterables的笛卡尔乘积
In [78]: seq="MED"
In [79]: ["".join(x) for x in product(*(d[y] for y in seq))]
Out[79]: ['ATGGAAGAC', 'ATGGAAGAT', 'ATGGAGGAC', 'ATGGAGGAT']
MED似乎与您的输出不匹配;你是说MDE?是的,你是对的DSM。。。我刚刚改变了。。。是的,订单很重要。打败我:我在写
[''.join(p)代表产品中的p(*(d[c]代表顺序中的c))]
。当问题涉及“所有可能”或“所有可能”时,您知道将涉及itertools
。^)我也在写同样的东西,除了生成器表达式部分。正如他们所说的,“一种显而易见的方法”<代码>itertools:让python程序员的生活变得简单,因为py2.3。嘿,如果我从txt文件中读取一个序列呢??我尝试了您的答案,但出现了一个错误:回溯(最近一次调用):文件“”,第2行,在文件“”中,第2行,在KeyError:“\n”
'ATGGACGATGAAGAG'
In [78]: seq="MED"
In [79]: ["".join(x) for x in product(*(d[y] for y in seq))]
Out[79]: ['ATGGAAGAC', 'ATGGAAGAT', 'ATGGAGGAC', 'ATGGAGGAT']