如何在 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的主要内容,如果未能解决你的问题,请参考以下文章