最短路径对齐

2024-10-01 17:36:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个函数来寻找矩阵中从M[0][0]到的最短路径 米[M][n] 我创造了矩阵和一切 我想画出最短的路径,所有的东西都在工作,但aseq1和aseq2都是空的 我找不到问题所在

def path(seq1,seq2,matrix,gap):
    aseq1 = '' 
    aseq2 = ''

#reconstruction de l'alignement aseq1 pour la premiere sequence et aseq2 pour la deuxieme  
i = len(seq1[0])-1
j = len(seq2[1])-1
while i>0 and j>0:


    if i%10==0:
        stderr.write('.') 


 #utilisation de la matrice remplie pour tracer le chemin le plus court de M[0][0] a M[m][n]      
    score = M[i][j] 
    score_diag = M[i-1][j-1] 
    score_up = M[i][j-1] 
    score_left = M[i-1][j]

    if score == score_diag + d[[seq1[i-1]][seq2[j-1]]]:
        aseq1 = seq1[i-1] + aseq1 
        aseq2 = seq2[j-1] + aseq2 
        i -= 1 
        j -= 1
    if score == score_left + gap:
        aseq1 = seq1[i-1] + aseq1 
        aseq2 = '-' + aseq2 
        i -= 1 
    elif score == score_up + gap:
        aseq1 = '-' + aseq1 
        aseq2 = seq2[j-1] + aseq2 
        j -= 1
    else:
            print("Erreur?")


while i>0:
    # si j==0 avant i==0 on continue l'iteration avec i
    aseq1 = seq1[i] + aseq1 
    aseq2 = '-' + aseq2 
    i -= 1


while j>0: 
    # si i==0 avant j==o on continue l'iteration avec j
    aseq1 = '-' + aseq1 
    aseq2 = seq2[j] + aseq2
    print (aseq1,aseq2)
    j -= 1
print(aseq1,aseq2)
return (aseq1,aseq2)

Tags: 路径lenifde矩阵lascoreprint
1条回答
网友
1楼 · 发布于 2024-10-01 17:36:30

注意Python中的缩进。第一个while循环内的所有代码都在if i%10==0内。如果i永远不能被10整除,程序将永远循环。你知道吗

这就是我要说的。将选项卡与上面的代码进行比较:

while i>0 and j>0:
    if i%10==0:
        stderr.write('.') 

    #by performing a traceback of how the matrix was filled out above, 
    #i.e. we find a shortest path from a[n,m] to a[0,0] 
    score = M[i][j] 
    score_diag = M[i-1][j-1] 
    score_up = M[i][j-1] 
    score_left = M[i-1][j] 

相关问题 更多 >

    热门问题