0

从字符串say dna = 'ATAGGGATAGGGAGAGAGCGATCGAGCTAG' 我得到子字符串say dna.format = 'ATAGGGATAG','GGGAGAGAG' 我只想打印长度可被3整除的子字符串怎么做?我正在使用模数,但它不起作用!

import re
if mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
print re.findall("ATA"(.*?)"AGA" , mydna)
if len(mydna)%3 == 0
   print mydna

更正的代码

import re
mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
re.findall("ATA"(.*?)"AGA" , mydna.format)
if len(mydna.format)%3 == 0:
   print mydna.format

这仍然没有给我长度可被三整除的子字符串。. 知道有什么问题吗?

我只希望打印长度可被三整除的子字符串

4

4 回答 4

1

为了包含重叠子字符串,我有以下冗长的版本。这个想法是找到所有开始和结束标记并计算它们之间的距离。

mydna = 'ATAGGGATAGGGAGAGAGCAGATCGAGCTAG'
[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start() and (end.start()-start.start())%3 == 0]
['ATAGGGATAGGG', 'ATAGGG']

显示所有子串,包括重叠的子串:

[mydna[start.start():end.start()+3] for start in re.finditer('(?=ATA)',mydna) for end in re.finditer('(?=AGA)',mydna) if end.start()>start.start()]
['ATAGGGATAGGG', 'ATAGGGATAGGGAG', 'ATAGGGATAGGGAGAGAGC', 'ATAGGG', 'ATAGGGAG', 'ATAGGGAGAGAGC']
于 2011-12-07T11:25:31.950 回答
0

使用模是正确的过程。如果它不起作用,那么你做错了。请提供您的代码示例以进行调试。

于 2011-12-05T19:49:37.807 回答
0

您还可以为此使用正则表达式:

re.findall('ATA((...)*?)AGA', mydna)

内大括号一次匹配 3 个字母。

于 2011-12-05T20:34:53.163 回答
0

re.findAll() 将为您返回一个匹配字符串的数组,您需要对每个字符串进行迭代并对这些字符串进行取模以实现您想要的结果。

于 2011-12-05T20:53:56.410 回答