使用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实现的简单万年历例子分享
Apr 25 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
Apr 27 Python
Django contenttypes 框架详解(小结)
Aug 13 Python
使用PIL(Python-Imaging)反转图像的颜色方法
Jan 24 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
wxpython绘制圆角窗体
Nov 18 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Python数据正态性检验实现过程
Apr 18 Python
python实现Oracle查询分组的方法示例
Apr 30 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 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
PHP安装全攻略:APACHE
2006/10/09 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
php实现文件下载代码分享
2014/08/19 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
自己动手实现jQuery Callbacks完整功能代码详解
2013/11/25 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
详解Python自建logging模块
2018/01/29 Python
Python实现的远程文件自动打包并下载功能示例
2019/07/12 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python输出数学符号实例
2020/05/11 Python
Django nginx配置实现过程详解
2020/09/10 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
公务员个人自我评价分享
2013/11/06 职场文书
大一自我鉴定范文
2013/12/27 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
MySQL 逻辑备份 into outfile
2022/05/15 MySQL