Python3替换使用字典

时间:2013-09-10 15:49:01

标签: python string python-3.x replace

有人可以解释一下这里有什么问题:

def get_complementary_sequence(string):
    dic = {'A':'T', 'C':'G', 'T':'A', 'G':'C'}
    for a, b in dic.items():
        string = string.replace(a, b)
    return string

我得到'T'和'C'的正确结果,但'A'和'C'不会取代。真的卡住了。

字符串看起来像'ACGTACG'。

2 个答案:

答案 0 :(得分:6)

您首先将所有A替换为T s,然后再将所有T替换为A s(包括您刚刚更换的A >>> string = 'ACGTACG' >>> string.replace('A', 'T') 'TCGTTCG' >>> string.replace('A', 'T').replace('T', 'A') 'ACGAACG' 与!):

transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
return string.translate(transmap)

使用翻译地图,然后输入str.translate()

str.translate()

None方法需要将代码点(整数)映射到替换字符(单个字符或代码点),或ord()(从输入字符串中删除代码点)。 string函数为我们提供了给定'from'字母的代码点。

这会在翻译地图中逐个查找{C}中A中的字符,而不是替换所有T,然后替换所有str.translate()

str.replace()还有一个额外的好处,就是 比一系列>>> string = 'ACGTACG' >>> transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'} >>> string.translate(transmap) 'TGCATGC' 次呼叫更快

演示:

{{1}}

答案 1 :(得分:2)

可变数据是你的敌人:)

请参阅,您首先将所有A替换为T s,然后,在另一次迭代中,将所有T替换为A又来了。

什么有效:

# for Creek and Watson's sake, name your variables sensibly
complements = {ord('A'):'T', ord('C'):'G', ord('T'):'A', ord('G'):'C'}
sequence = "AGCTTCAG"
print(sequence.translate(complements))

打印TCGAAGTC