使用 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