通过交换多个字母来修改字符串

Pet*_*ang 3 python python-3.x

假设我有一个非常长的字符串,'ABCEEEEEEDEDAAA......'但它只由五个字母组成.说我希望所有人'A'都是'D',反之亦然,'B'并且'C'(和一个例子是DNA中的核苷酸......).修改后的例子是'DCBEEEEEEAEADDD.......我意识到代码就好像string.replace('A','D').replace('D','A')不行.我想知道什么是最快的方法,因为我遇到的另一种方法就是找到每个索引,看起来有点复杂.

Kau*_* NP 7

由于要求是多次替换,因此最好先使用str.translate()创建映射表来使用str.maketranslate().

使用您的样品的缩短版例子'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'
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用str.replace函数,但是对于相同的功能需要更多的代码行.可以使用临时占位符进行替换.

示例:假设为just 'A'->'B''B'->'A'

>>> s = 'ABBA'
>>> s = s.replace('A','$')
#'$BB$'
>>> s = s.replace('B','A')
#'$AA$'
>>> s = s.replace('$','B')
>>> s
=> 'BAAB' 
Run Code Online (Sandbox Code Playgroud)

这里$用作占位符.如您所见,这对于需要大量更换而言变得令人厌烦.

注意:在上面的方法中,占位符也应该是唯一的,并且不应该已经存在于字符串中.