假设我有一个非常长的字符串,'ABCEEEEEEDEDAAA......'但它只由五个字母组成.说我希望所有人'A'都是'D',反之亦然,'B'并且'C'(和一个例子是DNA中的核苷酸......).修改后的例子是'DCBEEEEEEAEADDD.......我意识到代码就好像string.replace('A','D').replace('D','A')不行.我想知道什么是最快的方法,因为我遇到的另一种方法就是找到每个索引,看起来有点复杂.
由于要求是多次替换,因此最好先使用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)
这里$用作占位符.如您所见,这对于需要大量更换而言变得令人厌烦.
注意:在上面的方法中,占位符也应该是唯一的,并且不应该已经存在于字符串中.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |