使用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列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 Python
浅析Python多线程下的变量问题
Apr 28 Python
Python控制多进程与多线程并发数总结
Oct 26 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python机器学习之神经网络实现
Oct 13 Python
详解Python中的测试工具
Jun 09 Python
django的model操作汇整详解
Jul 26 Python
python实现在一个画布上画多个子图
Jan 19 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Pythonic版二分查找实现过程原理解析
Aug 11 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文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
用js遍历 table的脚本
2008/07/23 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
微信小程序 开发工具快捷键整理
2016/10/31 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
Angular实现svg和png图片下载实现
2019/05/05 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python3编写C/S网络程序实例教程
2014/08/25 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
python 列表递归求和、计数、求最大元素的实例
2018/11/28 Python
Python字节单位转换实例
2019/12/05 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
Python实现一个优先级队列的方法
2020/07/31 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
三好学生自我鉴定
2013/12/17 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript