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。空字符串会产生空结果。示例保留了其他符号和小写的输入字符;如果您的数据需要该策略,请单独规范化或验证输入。