使用python实现BLAST

最近在自学python,又用python实现了一下BLAST。

这次更新了打分函数如下,空位罚分改为-5,但不区分gap open 和 gap extend。

'''''
@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对字符串的处理更加强大,语言也更加简单,优雅。比如最后逆序输出alignment,java我是单独写了一个逆序函数,而python只用一个语句就可以完成相同任务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用python实现BLAST

    最近在自学python,又用python实现了一下BLAST. 这次更新了打分函数如下,空位罚分改为-5,但不区分gap open 和 gap extend. ''''' @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

  • python实现坦克大战游戏 附详细注释

    本文实例为大家分享了python实现坦克大战的具体代码,供大家参考,具体内容如下 #功能实现游戏主窗口 import pygame,time,random#导入模块 _display = pygame.display#赋值给一个变量 调用时方便 color_red = pygame.Color(255,0,0)#同上 v class MainGame(object): screen_width = 900#游戏界面宽度 screen_height = 550#界面的高度 Tank_p1 = No

  • 如何利用Python写个坦克大战

    前言 坦克大战是一款策略类的平面射击游戏,于 1985 年由 Namco 游戏公司发布,尽管时至今日已经有了很多衍生类的游戏,但这款游戏仍然受到了相当一部分人的欢迎,本文我们看一下如何使用 Python 来实现这款游戏,游戏实现主要用到的 Python 库为 pygame. 简介 坦克大战的组成主要包括:场景.坦克.子弹.食物.大本营,其本质就是一个塔防类的游戏,游戏目标为:守住大本营并且消灭敌方坦克,通常支持单双人模式,下面我们来看一下具体实现. 实现 首先,我们来实现游戏场景,场景的组成主要

  • 使用python如何提取JSON数据指定内容

    目录 python提取JSON数据指定内容 假设我们要获取'pic_str'里的数据 1.JSON数据为字符串类型 2.JSON数据为字典类型 python提取复杂JSON的数据 例子 解决方法 api 提取元素 应用场景 python提取JSON数据指定内容 假设我们要获取'pic_str'里的数据 JSON数据 {'err_no': 0, 'err_str': 'OK', 'pic_id': '1169213517976400008', 'pic_str': 'xoet', 'md5': '

  • python 服务器批处理得到PSSM矩阵的问题

    目录 1. 在linux上安装psiblast 2.下载并编译用于比对的大型蛋白质数据库 3. 获取PSSM矩阵 1)单条蛋白质序列的处理方法 2)批处理获取的方法 参考文献: 1. 在linux上安装psiblast 最好新建一个python环境,因为我发现conda安装blast默认的是python==3.6.11,可能会不小心把你的python版本改掉…然后你写好的代码全die了…… conda create -n blast python==3.6.11 source activate

  • 用Python登录好友QQ空间点赞的示例代码

    记得之前跟我女票说过,说要帮她空间点赞,点到999就不点了.刚开始还能天天记得,但是后来事情一多,就难免会忘记,前两天点赞的时候忽然觉得这样好枯燥啊,正好也在学Python,就在想能不能有什么方法能自动点赞. 以前学C借助win32API也干过操作其他应用程序的事,想想可行性还是挺高的,于是就去百度了一下.发现还真有类似的,说干就干,正好也是周末,那就直接熬夜"撸"起来吧.先上代码: def QQZan(qq): browser = webdriver.Chrome() browser

  • Python通过命令开启http.server服务器的方法

    前言 如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 HTTP 服务器.于是,你可以把你的目录和文件都以HTTP的方式展示出来.佻只需要干一件事情,那就是安装一个Python. 而对于安装python不熟悉的朋友们可以参考这两篇文章: win10环境下python3.5 Linux 中安装最新的 Python 3.6 版本 安装好后就可以开始本文的正

  • Python实现一个简单的验证码程序

    老师讲完random函数,自己写的,虽然和老师示例的不那么美观,智能,但是也自己想出来的,所以记录一下,代码就需要自己不断的自己练习,实战,才能提高啊!不然就像我们这些大部分靠自学的人,何时能学会.还有就是,这次听老师的,把自己的代码添加注释,所以这次把很简单的代码都写上了注释,而且很大白话,不管有没有接触过python的,我相信仔细看了,肯定能看懂.如果看完,再自己尝试着默写出来,那就是更好到了,好了进入正题: 自己写的: __Author__ = "Zhang Peng" impo

  • Python编程django实现同一个ip十分钟内只能注册一次

    很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注册,到登录界面,大于600可以注册,设计一个数据库来存储这个ip地址和访问时间, class Ip(models.Model): ip=models.CharField(max_length=20) time=models.DateTimeField() class Meta: verbose_na

  • 简单了解Python中的几种函数

    几个特殊的函数(待补充) python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda >>> g = lambda x,y:x+y #x+y,并返回结果 >>> g(3,4) 7 >>> (lambda x:x**2)(4) #返回4的平方 16 lambda函数的使用方法: 在lambda后面直接跟变量 变量后面是冒号 冒号后面是表达式,表达式计算

随机推荐