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

时间:2017-11-12 13:35:54

标签: python python-3.x

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

1 个答案:

答案 0 :(得分: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'

另一种方法是使用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' 

此处$用作占位符。正如您所看到的,这对于满足大量替换要求而言变得令人厌烦。

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