使用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 28 Python
基于进程内通讯的python聊天室实现方法
Jun 28 Python
tensorflow识别自己手写数字
Mar 14 Python
python selenium 弹出框处理的实现
Feb 26 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python对象的属性访问过程详解
Mar 05 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
python如何进行矩阵运算
Jun 05 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 Python
python中pandas对多列进行分组统计的实现
Jun 18 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
解决MySQL中文输出变成问号的问题
2008/06/05 PHP
PHP 图片上传代码
2011/09/13 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
2016/05/17 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
用Python生成器实现微线程编程的教程
2015/04/13 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
2018/01/11 Python
Django实现单用户登录的方法示例
2019/03/28 Python
Python concurrent.futures模块使用实例
2019/12/24 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
个人求职信范文分享
2014/01/31 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
改进工作作风心得体会
2016/01/23 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Python实现双向链表
2022/05/25 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers