使用python实现BLAST


Posted in Python onFebruary 12, 2018

最近在自学python,又用python实现了一下BLAST。

这次更新了打分函数如下,空位罚分改为-5,但不区分gap open 和 gap extend。

使用python实现BLAST

''''' 
@author: JiuYu 
''' 
 
def score(a,b):#scoring function 
  score=0 
  lst=['AC','GT','CA','TG'] 
  if a==b: 
    score +=2 
  elif a+b in lst: 
    score += -5 
  else: 
    score += -7 
  return score 
 
def BLAST(seq1,seq2):#Basic Local Alignment Search Tool 
  l1 = len(seq1) 
  l2 = len(seq2) 
  GAP =-5   #-5 for any gap 
  scores =[] 
  point =[] 
   
  for j in range(l2+1): 
    if j == 0: 
      line1=[0] 
      line2=[0] 
      for i in range(1,l1+1): 
        line1.append(GAP*i) 
        line2.append(2) 
    else: 
      line1=[] 
      line2=[] 
      line1.append(GAP*j) 
      line2.append(3) 
    scores.append(line1) 
    point.append(line2) 
   
  #fill the blank of scores and point 
  for j in range(1,l2+1): 
    letter2 = seq2[j-1] 
    for i in range(1,l1+1): 
      letter1 = seq1[i-1] 
      diagonal_score = score(letter1, letter2) + scores[j-1][i-1] 
      left_score = GAP + scores[j][i-1] 
      up_score = GAP + scores[j-1][i] 
      max_score = max(diagonal_score, left_score, up_score) 
      scores[j].append(max_score) 
       
      if scores[j][i] == diagonal_score: 
        point[j].append(1) 
      elif scores[j][i] == left_score: 
        point[j].append(2) 
      else: 
        point[j].append(3) 
         
  #trace back 
  alignment1='' 
  alignment2='' 
  i = l2 
  j = l1 
  print 'scores =',scores[i][j] 
  while True: 
    if point[i][j] == 0: 
      break 
    elif point[i][j] == 1: 
      alignment1 += seq1[j-1] 
      alignment2 += seq2[i-1] 
      i -= 1 
      j -= 1 
    elif point[i][j] == 2: 
      alignment1 += seq1[j-1] 
      alignment2 += '-' 
      j -= 1 
    else: 
      alignment1 += '-' 
      alignment2 += seq2[i-1] 
      i -= 1 
       
  #reverse alignment 
  alignment1 = alignment1[::-1] 
  alignment2 = alignment2[::-1] 
  print 'The best alignment:' 
  print alignment1 
  print alignment2 
 
seq1=raw_input('Please input your first sequences:\n') 
seq2=raw_input('input second sequences:\n') 
BLAST(seq1, seq2)

运行结果:

使用python实现BLAST

无疑python对字符串的处理更加强大,语言也更加简单,优雅。比如最后逆序输出alignment,java我是单独写了一个逆序函数,而python只用一个语句就可以完成相同任务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的多态性实例分析
Jul 07 Python
Python的pycurl包用法简介
Nov 13 Python
Python采用Django开发自己的博客系统
Sep 29 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
python+os根据文件名自动生成文本
Mar 21 Python
详解python读取和输出到txt
Mar 29 Python
python中字符串数组逆序排列方法总结
Jun 23 Python
Python shutil模块用法实例分析
Oct 02 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
Python调用C语言程序方法解析
Jul 07 Python
python Matplotlib模块的使用
Sep 16 Python
Python内置模块logging用法实例分析
Feb 12 #Python
Request的中断和ErrorHandler实例解析
Feb 12 #Python
Python实现Kmeans聚类算法
Jun 10 #Python
Python request设置HTTPS代理代码解析
Feb 12 #Python
python实现聚类算法原理
Feb 12 #Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 #Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 #Python
You might like
深入PHP5中的魔术方法详解
2013/06/17 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
jquery插件之easing使用
2010/08/19 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
2013/08/28 Javascript
详解js闭包
2014/09/02 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
2016/02/16 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
JavaScript使用readAsDataUrl方法预览图片
2017/05/10 Javascript
详解使用nodeJs安装Vue-cli
2017/05/17 NodeJs
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
python3访问sina首页中文的处理方法
2014/02/24 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
班级读书活动总结
2014/06/30 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
关于保护环境的建议书
2019/06/24 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android