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 = x
和 y_orig = y
作为第一个
然后在 except 块中调用 x_orig
和 y_orig
的行。
- 使
STRAND_X
和STRAND_Y
成为函数外的全局常量
作用域,以常量作为参数调用函数,操作
try块中的局部变量x
和y
,然后引用
except 块中的全局常量。
我正在编写一个程序,您可以在其中输入一个短的 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 = x
和y_orig = y
作为第一个 然后在 except 块中调用x_orig
和y_orig
的行。 - 使
STRAND_X
和STRAND_Y
成为函数外的全局常量 作用域,以常量作为参数调用函数,操作 try块中的局部变量x
和y
,然后引用 except 块中的全局常量。