使用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将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
Python HTMLParser模块解析html获取url实例
Apr 08 Python
python+Django+apache的配置方法详解
Jun 01 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
pip命令无法使用的解决方法
Jun 12 Python
python 两个数据库postgresql对比
Oct 21 Python
python的列表List求均值和中位数实例
Mar 03 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
用header 发送cookie的php代码
2007/03/16 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
疯狂Jquery第一天(Jquery学习笔记)
2012/05/11 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
Python中常见的数据类型小结
2015/08/29 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python梯度下降法的简单示例
2018/08/31 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
python 实现dict转json并保存文件
2019/12/05 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
什么是Python中的匿名函数
2020/06/02 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
校园安全教育广播稿
2014/02/17 职场文书
5.12护士节演讲稿
2014/04/30 职场文书