使用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 ljust rjust center输出
Sep 06 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
Python程序运行原理图文解析
Feb 10 Python
教你用Python创建微信聊天机器人
Mar 31 Python
PyCharm设置每行最大长度限制的方法
Jan 16 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
如何给Python代码进行加密
Jan 10 Python
python实现将列表中各个值快速赋值给多个变量
Apr 02 Python
Python基于locals返回作用域字典
Oct 17 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 Python
Python创建自己的加密货币的示例
Mar 01 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(6) 面向对象
2010/02/16 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
js png图片(有含有透明)在IE6中为什么不透明了
2010/02/07 Javascript
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
javascript实现textarea中tab键的缩排处理方法
2015/06/26 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
EasyUI中在表单提交之前进行验证
2016/07/19 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
python多进程下的生产者和消费者模型
2020/05/07 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
网络管理员岗位职责
2014/03/17 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
会计专业求职信范文
2015/03/19 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android