假设我有一个非常长的字符串,如’ABCEEEEEEDEDAAA ……’,但它只有五个字母组成.假设我希望所有’A’都是’D’,反之亦然,和’B’和’C’相同(例如DNA中的核苷酸……).修改后的例子是’DCBEEEEEEAEADDD …….我意识到像string.replace(‘A’,’D’)这样的代码.替换(‘D’,’A’)就行不通了.我想知道什么是最快的方法,因为我遇到的另一种方法就是找到每个索引,看起来有点复杂. 最佳答案 由于要求是多次替换,因此最好先使用
str.maketranslate()
创建映射表来使用
str.translate()
.
使用缩短版本样本的示例,其中’A’ – >’D’,’D’ – >’A’,’B’ – >’C’,’C’ – >’B’
>>> s = 'ABCEEEEEEDEDAAA'
>>> orig = 'ABCD'
>>> rep = 'DCBA'
>>> trans_table = str.maketrans(orig,rep)
>>> s.translate(trans_table)
=> 'DCBEEEEEEAEADDD'
另一种方法是使用str.replace函数,但是对于相同的功能需要更多的代码行.可以使用临时占位符进行替换.
示例:假设只是’A’ – >’B’和’B’ – >’A’
>>> s = 'ABBA'
>>> s = s.replace('A','$')
#'$BB$'
>>> s = s.replace('B','A')
#'$AA$'
>>> s = s.replace('$','B')
>>> s
=> 'BAAB'
这里$用作占位符.如您所见,这对于需要大量更换而言变得令人厌烦.
注意:在上面的方法中,占位符也应该是唯一的,并且不应该已经存在于字符串中.