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

2024-09-27 02:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够替换某些字符。所需的更换顺序应为
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)

Tags: 代码ingtfor顺序链接字符replace
3条回答

问题是,每个replace都在更改最后一个replace的输出-这意味着在运行.replace('C', 'G')之后,字符串变成"UACC",下一个replace将把所有的C替换成G,这意味着您得到的是UAGG,而不是UACG。要解决此问题,可以使用for循环遍历每个字符,并使用dictionary

def DNA_to_RNA(s):
    mask_table = {"A": "U", "T": "A", "C": "G", "G": "C"}
    result = []
    for char in s:
        result.append(mask_table[char])
    return ''.join(result)

或者,使用列表理解:

def DNA_to_RNA(s):
    mask_table = {"A": "U", "T": "A", "C": "G", "G": "C"}
    return ''.join([mask_table[char] for char in s])

使用MRNA.replace('C', 'G').replace('G', 'C')将用一个'G'替换任何'C',该'G'立即替换回'C'

您应该使用带有^{}^{}的转换表,而不是多个str.replace。由于这在一个过程中工作,因此它既可以避免撤消替换,又可以随着对str.replace的调用次数的增加而提高效率

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

print(dna_to_rna('ACGTAC')) # 'UGCAUG'

对于'G''C'的交换,在替换所有原始'T'之后,可以使用'T'作为缓冲区(因此您知道此时字符串中没有任何'T',因此这是安全的):

>>> 'ATGC'.replace('A', 'U').replace('T', 'A').replace('C', 'T').replace('G', 'C').replace('T', 'G')
'UACG'

与两个变量cg的非Python交换类似:

t = c
c = g
g = t

而不是

c, g = g, c

相关问题 更多 >

    热门问题