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

Aditya Raj 2023年1月30日
  1. DNA 鏈的反向互補
  2. 使用 Python 中的 for 迴圈獲取 DNA 鏈的反向互補
  3. 在 Python 中使用 join() 方法獲取 DNA 鏈的反向互補
  4. 在 Python 中使用 get() 方法獲取 DNA 鏈的反向互補序列
  5. 使用 Python 中的列表理解獲取 DNA 鏈的反向補碼
  6. 在 Python 中使用 translate() 方法獲取 DNA 鏈的反向互補
  7. 使用 Python 中的 Biopython 模組獲取 DNA 鏈的反向互補
  8. まとめ
使用 Python 獲取 DNA 鏈的反向互補

在使用 Python 處理科學任務時,我們需要執行某些任務。本文討論了使用 Python 獲得 DNA 鏈反向互補的各種方法。

DNA 鏈的反向互補

DNA 鏈主要由四種鹼基表示,即腺嘌呤(A)、胸腺嘧啶(T)、鳥嘌呤(G)和胞嘧啶(C)。也可能有其他型別的鹼基。

每條 DNA 鏈由一系列字母 A、T、G 和 C 表示。例如,ACGTAATTGGCC 可能是其中一條 DNA 鏈。

為了得到一條 DNA 鏈的互補鏈,我們將原始鏈中的 A 替換為 T,C 替換為 G,G 替換為 C,T 替換為 A。例如,ACGTAATTGGCC 的補碼是 TGCATTAACCGG。

為了反轉 DNA 鏈的補體,我們將反轉 DNA 鏈的補體中的字元。因此,反向補碼將是 GGCCAATTACGT。

現在讓我們討論使用 Python 獲得 DNA 字串的反向補碼的方法。

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

我們將按照以下步驟在 Python 中使用 for 迴圈來獲得 DNA 鏈的反向互補。

  • 我們將首先定義一個名為 reversed_strand 的空字串來儲存輸出字串。
  • 然後,我們將使用 len() 函式找到輸入 DNA 鏈的長度。len() 函式獲取 DNA 鏈的字串並返回長度。
  • 之後,我們將使用 for 迴圈以相反的順序遍歷輸入 DNA 鏈的字元。
  • 在迭代過程中,如果我們遇到字元 A,我們會將 T 附加到 reversed_strand。類似地,如果我們在序列中遇到 A、C 和 G,我們會將 T、G 和 C 附加到 reversed_strand
  • 如果我們在輸入 DNA 鏈中遇到任何其他字元,我們會將相同的字元附加到 reversed_strand
  • 執行 for 迴圈後,我們將在變數 reversed_strand 中獲得反向 DNA 鏈。

你可以在以下示例中觀察到這一點。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    if character == "A":
        reversed_strand = reversed_strand + "T"
    elif character == "T":
        reversed_strand = reversed_strand + "A"
    elif character == "G":
        reversed_strand = reversed_strand + "C"
    elif character == "C":
        reversed_strand = reversed_strand + "G"
    else:
        reversed_strand = reversed_strand + character
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

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

在上述方法中,在建立 reversed_strand 時,會為輸入 DNA 鏈中的每個字元建立一個新字串。如果輸入的 DNA 鏈太長,這在時間和記憶體方面可能會很昂貴。

為了避免這種情況,我們可以使用列表來使用 Python 獲取 DNA 鏈的反向互補。

我們將使用以下步驟使用 for 迴圈、列表和 join() 方法來反向互補 DNA 鏈。

  • 首先,我們將建立一個名為 complement_chars 的空列表來儲存 DNA 鏈反向補碼的字元。
  • 然後,我們將使用 len() 函式找到輸入 DNA 鏈的長度。
  • 之後,我們將使用 for 迴圈以相反的順序遍歷輸入 DNA 鏈的字元。
  • 在迭代中,如果我們遇到字元 A,我們將使用 append() 方法將 T 附加到 complement_charsappend() 方法,當在 complement_chars 上呼叫時,將一個字元作為其輸入引數並將其附加到 complement_chars
  • 類似地,如果我們在序列中遇到 A、C 和 G,我們會將 T、G 和 C 附加到 complement_chars
  • 如果我們在輸入 DNA 鏈中遇到任何其他字元,我們會將相同的字元附加到 complement_chars
  • 執行 for 迴圈後,我們將在 complement_chars 中獲得輸入 DNA 鏈的反向補碼字元列表。
  • 在此之後,我們將使用 join() 方法來獲得原始 DNA 鏈的反向互補。join() 方法,當在 input_string 上呼叫時,將一個可迭代物件作為其輸入引數;執行後,它返回一個新字串,其中包含可迭代物件的元素作為其字元,由 input_string 分隔。
  • 為了使用 join() 方法獲得 DNA 鏈的反向補碼,我們將在一個空字串上呼叫 join() 方法,並將 complement_chars 作為其輸入引數。執行 join() 方法後,我們將獲得輸入 DNA 鏈的反向互補。

你可以在以下示例中觀察到這一點。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
complement_chars = []
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    if character == "A":
        complement_chars.append("T")
    elif character == "T":
        complement_chars.append("A")
    elif character == "G":
        complement_chars.append("C")
    elif character == "C":
        complement_chars.append("G")
    else:
        complement_chars.append(character)
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

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

代替在 for 迴圈中使用 if-else 塊,我們可以使用字典和 get() 方法使用 Python 獲取 DNA 鏈的反向補碼。對於此任務,我們將建立以下字典。

reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}

get() 方法檢索與字典中的鍵關聯的值。當在字典上呼叫時,get() 方法將鍵作為其第一個輸入引數,將一個可選值作為其第二個輸入引數。

如果鍵存在於字典中,則返回與其關聯的值。否則,get() 方法返回作為第二個引數傳遞的可選值。

我們將使用 get() 方法和 reverse_dict 使用以下步驟來反轉 DNA 鏈的互補鏈。

  • 首先,我們將定義一個名為 reversed_strand 的空字串來儲存輸出字串。
  • 然後,我們將使用 len() 函式找到輸入 DNA 鏈的長度。
  • 之後,我們將使用 for 迴圈以相反的順序遍歷輸入 DNA 鏈的字元。
  • 在迭代過程中,我們將呼叫 reverse_dict 上的 get() 方法,並將當前字元作為其第一個和第二個引數。如果當前字元存在於 reverse_dict 中,get() 方法將返回 DNA 鏈補碼;否則,get() 方法將返回當前字元。
  • 我們將把 get() 方法的輸出附加到 reversed_strand
  • 執行 for 迴圈後,我們將在變數 reversed_strand 中獲得反向 DNA 鏈。

你可以在以下示例中觀察到這一點。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    reversed_strand = reversed_strand + reverse_dict.get(character, character)

print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

如前所述,在 for 迴圈中建立字串的方法成本很高。因此,我們可以使用列表和 join() 方法和 get() 方法使用 Python 獲取 DNA 鏈的反向互補,如以下示例所示。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
complement_chars = []
length = len(input_strand)
for i in range(length):
    character = input_strand[length - 1 - i]
    complement_chars.append(reverse_dict.get(character, character))
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

在這裡,我們首先在迭代輸入 DNA 鏈時建立了反向補碼中的字元列表。之後,我們通過使用 join() 方法連線字元來建立反向補碼。

使用 Python 中的列表理解獲取 DNA 鏈的反向補碼

除了使用 for 迴圈,你還可以使用列表推導來使用 Python 反向補充 DNA 鏈。

我們將首先使用索引來反轉輸入的 DNA 鏈,以使用列表理解來補充 DNA 鏈。之後,我們將使用列表推導和上一個示例中建立的 get() 方法和 reverse_dict 來獲取反向補碼的字元列表。

一旦我們得到字元列表,我們將使用 join() 方法來查詢輸入 DNA 鏈的反向補碼,如下例所示。

input_strand = "ACGTAATTGGCC"
reversed_strand = ""
reverse_dict = {"A": "T", "T": "A", "G": "C", "C": "G"}
temp = input_strand[::-1]
complement_chars = [reverse_dict.get(character) for character in temp]
reversed_strand = "".join(complement_chars)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

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

我們還可以使用 translate() 方法找到 DNA 鏈的反向互補。為此,我們將使用以下步驟。

  • 首先,我們將使用字串索引來反轉輸入 DNA 鏈。之後,我們將使用 maketrans() 函式建立一個轉換表。
  • maketrans() 函式將兩個字串作為其輸入引數,並且兩個字串的長度應該相同。執行後,它返回一個翻譯表,其中第一個字串中的每個字元都對映到第二個字串中相同位置的字元。
  • 在輸入 DNA 鏈上呼叫 maketrans() 方法時,我們將傳遞 ATGC 作為第一個輸入引數,將 TACG 作為第二個輸入引數。這樣,輸入 DNA 鏈中的每個字元都將對映到它的補碼。
  • 建立翻譯表後,我們將使用 translate() 方法獲取 DNA 鏈的反向互補。
  • translate() 方法在對字串呼叫時,將轉換表作為其輸入引數。執行後,根據翻譯表替換呼叫它的字串中的字元,返回一個新字串;如果在轉換表中找不到字元的對映,則將相同的字元複製到輸出字串。
  • 我們將在反向 DNA 鏈上呼叫 translate() 方法,並將翻譯表作為其輸入引數。
  • 執行 translate() 方法後,我們將獲得輸入 DNA 鏈的反向互補。

你可以在以下示例中觀察到這一點。

input_strand = "ACGTAATTGGCC"
translation_table = input_strand.maketrans("ATCG", "TAGC")
temp = input_strand[::-1]
reversed_strand = temp.translate(translation_table)
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

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

我們還可以使用 Python 中的 Biopython 模組來反向互補 DNA 鏈。使用以下語句,你可以使用 Python PIP3 的包安裝程式安裝 Biopython 模組。

pip3 install Bio

Biopython 模組提供了 reverse_complement() 方法來使用 Python 反向互補 DNA 鏈。當在 DNA 序列物件上呼叫時,reverse_complement() 方法返回 DNA 序列的反向補碼。

我們將使用 Python 中的 reverse_complement() 方法使用以下步驟來獲得 DNA 鏈的反向互補。

  • 首先,我們使用 Seq() 函式從 DNA 鏈建立 DNA 序列。Seq() 函式將表示 DNA 鏈的字串作為其輸入並返回 DNA 序列。
  • 得到 DNA 序列物件後,我們將呼叫序列上的 reverse_complement() 方法來獲取 DNA 鏈的反向互補,如下例所示。
from Bio.Seq import Seq

input_strand = "ACGTAATTGGCC"
sequence = Seq(input_strand)
reversed_strand = sequence.reverse_complement()
print("The input DNA strand is:", input_strand)
print("The reverse complement is:", reversed_strand)

輸出:

The input DNA strand is: ACGTAATTGGCC
The reverse complement is: GGCCAATTACGT

まとめ

在本文中,我們討論了使用 Python 反向互補 DNA 鏈的各種方法。在所有這些方法中,如果不允許使用外部庫,你可以選擇使用 translate() 方法的方法; 否則,你可以使用 Biopython 模組在 Python 中反向互補 DNA 鏈。

我們希望你喜歡閱讀這篇文章。請繼續關注更多內容豐富的文章。

作者: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

相關文章 - Python String