使用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 03 Python
python计算时间差的方法
May 20 Python
Python装饰器基础详解
Mar 09 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Django objects的查询结果转化为json的三种方式的方法
Nov 07 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
python实现爬取百度图片的方法示例
Jul 06 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Autopep8的使用(python自动编排工具)
Mar 02 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 前一天或后一天的日期
2008/06/28 PHP
php中require和require_once的区别说明
2014/02/27 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
js命名空间写法示例
2015/12/18 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
python使用socket远程连接错误处理方法
2015/04/29 Python
python3设计模式之简单工厂模式
2017/10/17 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python线程信号量semaphore使用解析
2019/11/30 Python
详解python如何引用包package
2020/06/07 Python
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
标准化管理实施方案
2014/02/25 职场文书
关于责任的演讲稿
2014/05/20 职场文书
2014年质量工作总结
2014/11/22 职场文书
2014年村委会工作总结
2014/11/24 职场文书
土建技术员岗位职责
2015/04/11 职场文书
企业党建工作总结2015
2015/05/26 职场文书