我希望能够替换某些字符。所需的更换订单应为
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)
答案 0 :(得分:12)
使用MRNA.replace('C', 'G').replace('G', 'C')
会将'C'
替换为'G'
,而'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'
的调用次数增加而变得更加高效。
{{1}}
答案 1 :(得分:1)
问题是,每个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])
答案 2 :(得分:-1)
对于交换'G'
和'C'
,您可以在替换所有原始'T'
后使用'T'
作为缓冲区(因此,知道此时字符串中没有任何'T'
,因此很安全):
>>> 'ATGC'.replace('A', 'U').replace('T', 'A').replace('C', 'T').replace('G', 'C').replace('T', 'G')
'UACG'
类似于两个变量c
和g
的非Python交换:
t = c
c = g
g = t
代替
c, g = g, c