使用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使用Socket(Https)Post登录百度的实现代码
May 18 Python
简介Python中用于处理字符串的center()方法
May 18 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
Python简单定义与使用二叉树示例
May 11 Python
机器学习实战之knn算法pandas
Jun 22 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
Python3自定义json逐层解析器代码
May 11 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
面向新手解析python Beautiful Soup基本用法
Jul 11 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
adodb与adodb_lite之比较
2006/12/31 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
初识PHP中的Swoole
2016/04/05 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
2020/05/17 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
python网络编程之读取网站根目录实例
2014/09/30 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python中的decimal类型转换实例详解
2019/06/26 Python
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
美国家居装饰购物网站:Amanda Lindroth
2020/03/25 全球购物
大专应届生个人的自我评价
2013/11/21 职场文书
公司营业员的自我评价
2014/03/04 职场文书
组织鉴定材料
2014/06/02 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
ubuntu下常用apt命令介绍
2022/06/05 Servers