通过链接 str.replace 方法替换字符会产生错误的结果

Jak*_*sen 3 python string replace

我希望能够替换某些字符。所需的替换顺序应该是
A -> U, T -> A, G -> C, C -> G。

但是出于某种原因,C 没有被 G 替换。我已经链接了迄今为止的代码。

v = "ATGC"
DNA = [v]
MRNA = []
for s in DNA:
    MRNA.append(s.replace('A', 'U').replace('T', 'A').replace('C', 'G').replace('G', 'C'))
print(MRNA)
Run Code Online (Sandbox Code Playgroud)

Oli*_*çon 12

UsingMRNA.replace('C', 'G').replace('G', 'C')将用'C'a替换 any ,'G'然后立即用 a 替换回来'C'

str.replace您应该使用带有str.maketrans和的转换表而不是多个str.translate。由于这在一次传递中起作用,因此它既避免了撤消替换,又随着调用次数的str.replace增加而变得更加高效。

def dna_to_rna(s):
    trans_table = str.maketrans('ATCG', 'UAGC')
    return s.translate(trans_table)

print(dna_to_rna('ACGTAC')) # 'UGCAUG'
Run Code Online (Sandbox Code Playgroud)

  • 好的,我同意这一点:-)。与此同时,我做了一些基准测试,在 ASCII 字符串上,你的速度比我的速度快大约 4 倍(使用了 5 个“replace”),但当我添加非 ASCII 字符(“'ö”)时,速度比我的慢 12 倍左右`)。 (2认同)