在Python中,除了使用str.translate()之外,替换给定字符串中某些字符的最快方法是什么?



除了使用str.translate()之外,什么是替换给定字符串中某些字符的最快方法?

给定一个仅由字母" a "、"T"、"G"one_answers"C"组成的sequence,我想替换" a "的每个实例用"T", "用"A", "与"G"one_answers"G"与"C"为此,我使用了ascii字典map = {65:84,84:65,71:67,67:71},并使用了sequence.translate(map)。然而,在Python 3.8中,这似乎很慢。我看到有人提到使用bytebytearray来做到这一点,但我只是不知道如何使它工作。

看起来我首先需要使用sequence.encode('ascii', 'ignore')编码序列,然后使用translate()进行翻译?

有谁能帮帮我吗?例如,

sequence = 'ATGCGTGCGCGACTTT'
# {'A':'T', 'T':'A', 'C':'G', 'G':'C'}
map_dict = {65:84,84:65,71:67,67:71}
# expect 'TACGCACGCGCTGAAA'
sequence.translate(map_dict)

假设这里的序列很长,那么这应该是0 (1):

如果你维护的索引包含了序列中每个字母的位置,那么你只需要更新索引来进行批量替换。

例如给定seq = "AGCTTCGA">

index = {"A": {0, 7}, "G": {1, 6}, "C": {2, 5}, "T": {3, 4}}

如果我理解正确的话,你想做一个交换:

def swap(index, charA, charB):
tmp = index[charB]
index[charB] = index[charA]
index[charA] = tmp
swap(index, "A", "T")
print(index)
# {'A': {3, 4}, 'G': {1, 6}, 'C': {2, 5}, 'T': {0, 7}}

最新更新