HOWTO · Python

使用 Python 獲取 DNA 鏈的反向互補

本文討論瞭如何使用 Python 建立 DNA 鏈的反向互補。它使用內建的字串方法和 Biopython 模組。

本頁內容

對於 DNA 鏈 ACGTAATTGGCC,其反向互補為 GGCCAATTACGT。Python 透過對每個鹼基取互補,並從末尾向開頭讀取鹼基來產生它。

DNA 鏈的反向互補

DNA 使用 A↔T 和 C↔G 鹼基對。ACGTAATTGGCC 的互補為 TGCATTAACCGG;將該互補反轉可得 GGCCAATTACGT。反轉改變順序,而互補改變每個鹼基。

下面的範例對應大寫字母 A、T、C 和 G。它們按原樣保留其他符號,包括小寫字母;它們不會正規化大小寫,也不會驗證完整的 DNA 字母表。

在 Python 中使用 for 迴圈取得 DNA 鏈的反向互補

對於大寫 DNA 序列,這個完整的範例使用 for 迴圈建立結果:

input_strand = "ACGTAATTGGCC"
complements = {"A": "T", "T": "A", "C": "G", "G": "C"}
result = ""
for base in reversed(input_strand):
    result += complements.get(base, base)
print(result)
GGCCAATTACGT

迴圈以相反順序造訪鹼基。字典的後援機制會在某個符號不是四個大寫鹼基之一時保持該符號不變。

在 Python 中使用 join() 方法取得 DNA 鏈的反向互補

將字元收集到清單中再將它們連接起來,使組裝步驟變得清晰:

input_strand = "ACGTAATTGGCC"
complements = {"A": "T", "T": "A", "C": "G", "G": "C"}
complement_chars = [complements.get(base, base) for base in reversed(input_strand)]
result = "".join(complement_chars)
print(result)
GGCCAATTACGT

join() 將清單元素組合成一個字串。這種標準函式庫方法避免了反覆擴展結果字串。

在 Python 中使用 get() 方法取得 DNA 鏈的反向互補

在這裡,base 是字典的鍵。get(base, base) 在鍵存在時回傳對應的互補鹼基,否則回傳原始字元作為後援值:

input_strand = "ACGTAATTGGCC"
complements = {"A": "T", "T": "A", "C": "G", "G": "C"}
result_chars = []
for base in reversed(input_strand):
    result_chars.append(complements.get(base, base))
print("".join(result_chars))
GGCCAATTACGT

清單加連接的形式在由字元組裝字串的同時保持迴圈的可讀性。

在 Python 中使用清單推導式取得 DNA 鏈的反向互補

反向切片 [::-1] 從右到左造訪輸入。將原始字元作為後援值提供,可確保清單中的每個元素都是字串:

input_strand = "ACGTAATTGGCC"
complements = {"A": "T", "T": "A", "C": "G", "G": "C"}
result = "".join(complements.get(base, base) for base in input_strand[::-1])
print(result)
GGCCAATTACGT

如果沒有該後援值,未對應的鹼基會產生 None,而 join() 無法將其與字串組合。

在 Python 中使用 translate() 方法取得 DNA 鏈的反向互補

標準函式庫的 str.maketrans() 建立一個字元對應表;str.translate() 套用它。先單獨反轉鏈,然後轉換每個鹼基:

input_strand = "ACGTAATTGGCC"
table = str.maketrans("ATCG", "TAGC")
result = input_strand[::-1].translate(table)
print(result)
GGCCAATTACGT

表中沒有的字元會原樣通過。這種方法不需要任何外部函式庫。

在 Python 中使用 Biopython 模組取得 DNA 鏈的反向互補

Biopython 是一個外部相依性,提供包括 reverse_complement() 在內的序列公用程式。它的發行名稱是 biopython,而 Python 匯入路徑以 Bio 開頭。使用 python -m pip install biopython 將它安裝到執行指令碼的環境中。

以下內容是語法示意,並非經執行階段驗證的範例:在所選的執行階段環境中,安裝和匯入尚未得到確認。

from Bio.Seq import Seq 和 Seq("ACGTAATTGGCC").reverse_complement()

此選項取決於是否安裝了 Biopython;上面的標準函式庫範例則不然。當函式庫的序列公用程式適合您的專案時使用該函式庫,或者在新增相依性不合適時選擇標準函式庫方法。

結論

對於標準函式庫解決方案,可使用迴圈、字典、清單推導式或 translate()。當 Biopython 更廣泛的序列公用程式適合任務時,可選擇 Biopython。空字串會產生空結果。範例保留了其他符號和小寫的輸入字元;如果您的資料需要該策略,請單獨正規化或驗證輸入。