簡體   English   中英

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

[英]In Python, what is the fastest way to replace certain characters in a given string other than using str.translate()?

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

給定一個僅由字母“A”、“T”、“G”和“C”組成的sequence ,我想用“T”替換“A”的每個實例,用“A”、“C”替換“T” ”與“G”,“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)

假設這里的序列很長,那么這應該是 O(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}}

我將假設您只想用另一個字符串替換任何出現的字符串。 在這種情況下,替換將不起作用感謝您指出這一點,但請使用:

for i in string:
   match i:
      case "A": i="T"
      case "T": i="A"
      case "C": i="G"
      case "G": i="C"
   continue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM