2024-09-27 02:21:21 发布
网友
我希望能够替换某些字符。所需的更换顺序应为 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)
问题是,每个replace都在更改最后一个replace的输出-这意味着在运行.replace('C', 'G')之后,字符串变成"UACC",下一个replace将把所有的C替换成G,这意味着您得到的是UAGG,而不是UACG。要解决此问题,可以使用for循环遍历每个字符,并使用dictionary:
replace
.replace('C', 'G')
"UACC"
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'
MRNA.replace('C', 'G').replace('G', 'C')
'G'
'C'
您应该使用带有^{}和^{}的转换表,而不是多个str.replace。由于这在一个过程中工作,因此它既可以避免撤消替换,又可以随着对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',因此这是安全的):
'T'
>>> 'ATGC'.replace('A', 'U').replace('T', 'A').replace('C', 'T').replace('G', 'C').replace('T', 'G') 'UACG'
与两个变量c和g的非Python交换类似:
c
g
t = c c = g g = t
而不是
c, g = g, c
问题是,每个
replace
都在更改最后一个replace
的输出-这意味着在运行.replace('C', 'G')
之后,字符串变成"UACC"
,下一个replace
将把所有的C
替换成G
,这意味着您得到的是UAGG
,而不是UACG
。要解决此问题,可以使用for
循环遍历每个字符,并使用dictionary
:或者,使用列表理解:
使用
MRNA.replace('C', 'G').replace('G', 'C')
将用一个'G'
替换任何'C'
,该'G'
立即替换回'C'
您应该使用带有^{} 和^{} 的转换表,而不是多个
str.replace
。由于这在一个过程中工作,因此它既可以避免撤消替换,又可以随着对str.replace
的调用次数的增加而提高效率对于
'G'
和'C'
的交换,在替换所有原始'T'
之后,可以使用'T'
作为缓冲区(因此您知道此时字符串中没有任何'T'
,因此这是安全的):与两个变量
c
和g
的非Python交换类似:而不是
相关问题 更多 >
编程相关推荐