如何在 Python 中将 DNA 序列列表转录为 RNA

Posted

技术标签:

【中文标题】如何在 Python 中将 DNA 序列列表转录为 RNA【英文标题】:How to transcribe a list of DNA sequences to RNA in Python 【发布时间】:2021-07-19 19:02:01 【问题描述】:

我正在尝试返回从 DNA 序列转录的 RNA 序列列表。理想情况下应该是这样的:

DNA_seq = ['AGGTC','TTGACT','ATGGCA']
RNA_seq = ['UCCAG','AACUGA','UACCGU']

据我了解,字典应该有助于存储每个核苷酸及其对应碱基对的键值对。这是我目前所拥有的:

def RNA(DNA_strand):
    mapping = 'G':'C', 'C':'G', 'T':'A', 'A':'U'
    rna_strand = ''
    for char in DNA_strand:
        rna_strand += mapping[char]
    return rna_strand
RNA_seq = []
for x in DNA_seq:
    RNA_seq.append(RNA(x))

我有点拼凑起来,但我似乎仍然不够有效。任何帮助将不胜感激!

【问题讨论】:

不清楚您到底在寻找什么。您的代码似乎运行良好,所以很好奇确切的问题是什么。 抱歉,我的 IDE 似乎有问题!当我第一次尝试运行此代码时出现错误,但我关闭了我的程序并重新打开它似乎可以完成这项工作! 【参考方案1】:

您可以利用str.maketrans 创建映射,然后使用str.translate 执行替换:

mapping = str.maketrans("GCTA", "CGAU")

for dna in "AGGTC", "TTGACT", "ATGGCA":
    print(dna.translate(mapping))

输出:

UCCAG
AACUGA
UACCGU
>>> 

str.maketrans 返回一个有序键值对的字典。

【讨论】:

【参考方案2】:

映射绝对是正确的方法。但是,您可以在一行中完成所有这些任务,而无需所有循环:

RNA_seq = ["".join([mapping[char] for char in DNA_strand]) for DNA_strand in DNA_seq]

这也将显着提高效率:

它不会为每个字符执行str 连接; 在这种情况下,list comp 比相应的 for 循环更快,因为它避免了多次 list.append() 调用的开销。

【讨论】:

列表推导不会消除循环,也不一定更快 它在字节码级别进行迭代,但在这种情况下它更快,因为它不调用 append()。恐怕我的措辞好像它们总是更快,这是不正确的。

以上是关于如何在 Python 中将 DNA 序列列表转录为 RNA的主要内容,如果未能解决你的问题,请参考以下文章

什么是转录因子?

promoter, exon, intron和UTR的关系

关于DNA正负链的定义

转录因子实验研究方法都有哪些?

从 Python 开始 - 字符串列表的汉明距离

PCR技术与DNA半保留复制的异同?