代码用途:
我提供一个字符串并将其与字典键匹配;如果键与字符串匹配,则打印字典值。
下面是代码:
def to_rna(dna_input):
dna_rna = {'A':'U', 'C':'G', 'G':'C', 'T':'A'}
rna = []
for key in dna_rna.iterkeys():
if key in dna_input:
rna.append(dna_rna[key])
print "".join(rna)
to_rna("ACGTGGTCTTAA") #the string input问题:
结果应该是'UGCACCAGAAUU‘,但我得到的只是'UGAC’。问题似乎是我在字符串中有重复字符,而循环忽略了这一点。如何循环字典,使其返回字典值的次数与找到dict键的次数一样多?
发布于 2015-10-23 21:22:54
如果要为dna_input中的每个字符输出一个字符,则需要在dna_input中对字符进行迭代。注意,get()函数为字典中没有的字符提供了默认设置。我什么也不做,如果愿意的话,你可以在这里放一个n,或者放一个X。
rna.append(dna_rna.get(char, 'n'))您的代码只在dna_rna字典中的4个条目上迭代。
def to_rna(dna_input):
dna_rna = {'A':'U', 'C':'G', 'G':'C', 'T':'A'}
rna = []
for char in dna_input:
rna.append(dna_rna.get(char, ''))
print "".join(rna)
to_rna("ACGTGGTCTTAA") #the string input然而,这并不是转换字符串的最有效的方法。
发布于 2015-10-23 21:29:10
你可以用translate()。编辑:我添加了regex来返回错误条目的- (似乎是个好主意@jh44tx ):
import string
import re
rna_trans = string.maketrans("ACGTU","UGCA-")
rna_trans = re.sub("[^UGCA]","-",rna_trans)
print "ACGTGGTCTTAA".translate(rna_trans)由于映射为1:1,所以还可以创建反向转换:
rev_rna_trans = string.maketrans("UGCAT","ACGT-")
rev_rna_trans = re.sub("[^ACGT]","-",rna_trans)发布于 2015-10-23 21:32:30
万一你有时会收到垃圾信,你可以这样做:
def to_rna(dna_input):
dna_rna={'A':'U','C':'G','G':'C','T':'A'}
rna=[]
for char in dna_input:
if char in dna_rna.keys():
rna.append(dna_rna[char])
else:
rna.append('-')
print "".join(rna)
to_rna("ACGTGGTCTTAAX")结果表明:UGCACCAGAAUU-
https://stackoverflow.com/questions/33311568
复制相似问题