Python中的DNA序列比对,使块更干净
我在写一个程序,你输入一个短的DNA序列和一个长的,它试图返回DNA序列的最佳排列。标准是,如果存在差距,则减去10;如果存在匹配,则加1;如果存在不匹配,则减去1。 我的程序的第一部分对对齐进行评分,它通过不断删除长序列的第一个元素,然后对对齐进行评分,从而递归地工作。我的问题是我的积木很难看。有没有一种方法可以让我在不断删除元素之前回调原来的xPython中的DNA序列比对,使块更干净,python,recursion,try-catch,except,Python,Recursion,Try Catch,Except,我在写一个程序,你输入一个短的DNA序列和一个长的,它试图返回DNA序列的最佳排列。标准是,如果存在差距,则减去10;如果存在匹配,则加1;如果存在不匹配,则减去1。 我的程序的第一部分对对齐进行评分,它通过不断删除长序列的第一个元素,然后对对齐进行评分,从而递归地工作。我的问题是我的积木很难看。有没有一种方法可以让我在不断删除元素之前回调原来的x lst=[] def align_score(x,y): gap_score=(len(x)-len(y))*(-10) match
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=x
指定为第一个变量 然后在except块中调用y_orig=y
和x_orig
的行y_orig
- 在函数外部设置
和STRAND_X
全局常量 作用域,使用常量作为参数调用函数,操纵 try块中的局部变量STRAND_Y
和x
,然后参考 块中的全局常量y