飞道的博客

生物信息学算法之Python实现|Rosalind刷题笔记:009 查找DNA中的motif

450人阅读  评论(0)

在字符串中查找子串是一个常见问题。子串在字符串中可能是唯一的,比如特定的基因序列;也有可能有多个拷贝,比如基因组中的重复序列。这些重复序列可能相同,可能有微小区别。本题中重复子串完全相同,可以简单地通过 Python 的find()函数来查找,如果重复子串不完全相同并且符合某种模式,则可以用正则表达式模块re来处理。

给定: 两个 DNA 序列st(长度都不超过 1kb)。

需得: ts中的所有位置。

示例数据


   
  1. GATATATGCATATACTT
  2. ATAT

示例结果

2 4 10

Python 实现

Finding_a_Motif_in_DNA.py


   
  1. import sys
  2. import re
  3. def find_motif(s, t):
  4. ret = []
  5. pos = s.find(t)
  6. while pos != -1:
  7. ret. append(pos+ 1)
  8. pos = s.find(t, pos+ 1)
  9. return ' '.join([str(n) for n in ret])
  10. def test():
  11. return find_motif( 'GATATATGCATATACTT', 'ATAT') == '2 4 10'
  12. if __name__ == '__main__':
  13. if not test():
  14. print( "find_motif: Failed")
  15. sys.exit( 1)
  16. with open( 'rosalind_subs.txt') as fh:
  17. s = fh.readline().rstrip()
  18. t = fh.readline().rstrip()
  19. print(find_motif(s, t))
  • 注意找到一个位置后,再次查找需要从下一个位置(pos+1)开始,以防止重复查找。


喜欢文章请点个“赞”吧!或者点击“在看”让更多朋友看到,点击“阅读原文”可以在知乎专栏上给我留言,博客地址:https://jianzuoyi.github.io


转载:https://blog.csdn.net/weshengxin/article/details/111087752
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场