Python 中的 DNA 序列比对,使块更干净

DNA Sequence Alignment in Python, Making a Cleaner Except Block

我正在编写一个程序,您可以在其中输入一个短的 DNA 序列和一个长的 DNA 序列,它会尝试 return DNA 序列的最佳可能比对。标准是,如果有差距,你减去 10,如果有匹配,你加 1,如果有不匹配,你减去 1。 我程序的第一部分对比对进行评分,它通过持续删除长序列的第一个元素然后对比对进行评分来递归工作。我的问题是我的 except 块非常难看。有没有一种方法可以在我不断从中删除元素之前回调原始 x ?

lst=[]
def align_score(x,y):
    gap_score=(len(x)-len(y))*(-10)
    match_score=0
    mismatch_score=0
    ref=0
    try:
        for base in y:
            if y[ref]==x[ref]:
                match_score+=1
                ref+=1
            else:
                mismatch_score-=1
                ref+=1
        a=gap_score+match_score+mismatch_score
        lst.append(a)
        del(x[0])
        align_score(x,y)
    except:
        z=lst.index(max(lst))
        x='ACGTCCTTCATT'
        print x
        y='GTCTCATG'
        print "%s%s"%(" "*z, y)

x=list('ACGTCCTTCATT')
y=list('GTCTCATG')
align_score(x,y)

您可以通过两种方式轻松做到这一点:

  • 在您的函数中分配变量 x_orig = xy_orig = y 作为第一个 然后在 except 块中调用 x_origy_orig 的行。
  • 使STRAND_XSTRAND_Y成为函数外的全局常量 作用域,以常量作为参数调用函数,操作 try块中的局部变量xy,然后引用 except 块中的全局常量。