使用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爬取京东的商品分类与链接
Aug 26 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
简单谈谈python中的lambda表达式
Jan 19 Python
python3.5 email实现发送邮件功能
May 22 Python
详解Python网络框架Django和Scrapy安装指南
Apr 01 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python实现大学人员管理系统
Oct 25 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
解决Keras中CNN输入维度报错问题
Jun 29 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
python cv2图像质量压缩的算法示例
Jun 04 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
php 数组的合并、拆分、区别取值函数集
2010/02/15 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
jquery 弹出层实现代码
2009/10/30 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
js闭包的用途详解
2014/11/09 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
Python重新引入被覆盖的自带function
2014/07/16 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
HTML5利用约束验证API来检查表单的输入数据的代码实例
2016/12/20 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
群胜软件Java笔试题
2012/09/29 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
省级四好少年事迹材料
2014/01/25 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
早读课迟到检讨书
2014/09/25 职场文书
同学联谊会邀请函
2019/06/24 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书