Python3使用字典替换

Python3使用字典替换,python,string,python-3.x,replace,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”。首先将所有As

请任何人解释一下这里的问题:

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”。

首先将所有
A
s替换为
T
s,然后再次将所有
T
s替换为
A
s(包括刚刚替换的
A
s!):

改为使用翻译图,输入到:

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

这将在翻译映射中逐个查找
string
中的字符,而不是将所有
A
s替换为所有
T
s

str.translate()
具有比一系列
str.replace()
调用快得多的额外优势

演示:


可变数据是您的敌人:)

请参见,首先将所有
A
s替换为
T
s,然后在另一次迭代中,再次将所有
T
s替换为
A
s

工作原理:

# 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

您按顺序迭代字典的每个项目,因此它们都被正确替换!问题是,当你替换T时,A已经被T替换了,所以你要把它替换回来。现在你正在尝试处理DNA序列,我建议你改用
str。translate()
也比简单的
''快得多。join(dic[c]表示s中的c)
transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
return string.translate(transmap)
>>> string = 'ACGTACG'
>>> transmap = {ord('A'): 'T', ord('C'): 'G', ord('T'): 'A', ord('G'): 'C'}
>>> string.translate(transmap)
'TGCATGC'
# 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))