0

TACGCTGGTACTGGCAT と AGCTGGTCAGAA の 2 つのシーケンス間の LCS を見つけようとしています。どのシーケンスが一般的か (GCTGGT) をバックトラックできるように、答えを行列として出力する必要があります。以下のコードを使用すると、次のエラーが発生します。IndexError: リスト インデックスが範囲外です。以下のコードでこのエラーを回避するにはどうすればよいですか?

def LCS(x, y):
    m = len(x)
    n = len(y)
    C = []  
    for i in range(m):
        for j in range(n):
            if x[i] == y[j]:
                C[i][j] == C[i-1][j-1] + 1
            else:
                C[i][j] == 0
    return C


x = "TACGCTGGTACTGGCAT"
y = "AGCTGGTCAGAA"
m = len(x)
n = len(y)
C = LCS(x, y)

print C
4

1 に答える 1

0

[i][j]インデックスがまだ存在しないため、リストに追加する必要があります。

def LCS(x, y):
    m = len(x)
    n = len(y)
    C = []  
    for i in range(m):
    C.append([])          # append a blank list at index [i]
        for j in range(n):
            if x[i] == y[j]:
                C[i].append(C[i-1][j-1] + 1)   # append current element to [i]
            else:
                C[i].append(0)
    return C

テスト

x = "TACGCTGGTACTGGCAT"
y = "AGCTGGTCAGAA"
LCS(x,y)

出力

[[0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1],
 [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0],
 [0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 0, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0],
 [0, 1, 0, 0, 4, 1, 0, 0, 0, 1, 0, 0],
 [0, 1, 0, 0, 1, 5, 0, 0, 0, 1, 0, 0],
 [0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1],
 [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0],
 [0, 1, 0, 0, 3, 1, 0, 0, 0, 1, 0, 0],
 [0, 1, 0, 0, 1, 4, 0, 0, 0, 1, 0, 0],
 [0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0],
 [1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1],
 [0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]]
于 2014-09-28T20:46:41.233 に答える