我正在写一个脚本,从一系列基因中移除开放的阅读框架。我知道 re
模块,但我不太明白它在涉及列表时的正确用法-以下是我的任务:
我需要找到起始密码子 'AUG'
在基因里
然后我需要找到3个可能的终止密码子中的一个,它们存储在一个列表中 stop_codons = ['TAG', 'TAA', 'TGA']
然后我需要删除起始密码子和终止密码子之间的所有其他字符。
我取得了一些成就:
gene = 'AUGGTAAATTGAUUGUTAUTAUTGTAGTGATGU'
re.sub('AUG.+TAG', '', gene)
然而,我觉得必须有一个更好的方法,而不是为每个终止密码子写一行,循环通过一个预定义的列表将是更好的形式(一些线粒体基因组和细菌基因组有替代的起始/终止密码子,我希望代码可以很容易地修改,以包括这些密码子时,适当的)。
如何使用re实现这一点?
2条答案
按热度按时间ltskdhd11#
下面的代码应该符合你的意思。它寻找发生率,然后打印每个项目的起始密码子和终止密码子之间没有字符的剪切基因
stop_codons
列表。你的代码也被删掉了
start_codon
以及stop_codon
在输出中。我不知道这是不是你想要的。如果是的话,就换一个cut_gene
在for循环中使用re.sub示例行的变量如下:z4bn682m2#
首先,请注意
re
尝试匹配可能的最大子字符串。这意味着天真的方法不会在第一个“结束”密码子处停止,而是在最后一个密码子处停止:更好:
通过在regex中使用“a或b”类型的表达式,可以避免多次迭代字符串,如下所示
(A|B)
. 在您的示例中: