我正在查看一条长链 DNA 核苷酸,并正在寻找以起始代码“AAA”开头并以终止代码“CCC”结尾的序列。由于核苷酸以三联体形式出现,因此我发现的每个序列的开头和结尾之间的核苷酸数必须是三的倍数。
例如,'AAAGGGCCC' 是有效序列,但 'AAAGCCC' 不是。
此外,在每个终止码之前,我想要我能找到的关于特定阅读框的最长链。
例如,如果 DNA 是“AAAGGGAAACCC”,那么“AAAGGGAAACCC”和“AAACCC”在技术上都是有效的,但由于它们共享相同的终止码实例,我只想要最长的 DNA 链“AAAGGGAAACCC”。另外,如果我的链是“AAAAGGCCCCC”,我必须返回“AAAAGGCCC”和“AAAGGCCCC”,因为它们处于不同的阅读框架中(一个阅读框架是 mod 3,另一个是 mod 1。)
虽然我认为我有代码来搜索满足 3 的倍数要求且不重叠的字符串,但我不确定如何实现保持相同阅读框架的第二个标准。我下面的代码只会返回最长的不重叠的字符串,但不区分阅读框架,所以在上面的例子中它会捕获'AAAAGGCCC'而不是'AAAGGCCCC':
match = re.finditer(r"AAA\w{3}{%d}BBB$"% (minNucleotide-6, math.ceil((minNucleotide-6)/3))
抱歉啰嗦了,感谢您的观看!