簡體   English   中英

Python構建二維數組使列表分配索引超出范圍

[英]Python building 2d array getting list assignment index out of range

N = len(s1)
M = len(s2)
matrix = [[0 for i in range(N+1)] for j in range(M+1)]
gap = int(raw_input('Enter gap score'))
mismatch = int(raw_input('Enter mismatch score'))
match = int(raw_input('Enter the match score'))

matrix[0][0] = 0

for i in range(1,(N+1)):
    matrix[i][0]=(matrix[(i-1)][0] + gap)

for j in range(1,(M+1)):
    matrix[0][j]=(matrix[0][(j-1)] + gap)  

for i in range(1,N+1):
    for j in range(1,M+1):
        if(s1[i-1] == s2[j-1]):
            score1 = matrix[i-1][j-1] + match

        else:
            score1 = matrix[i-1][j-1] + mismatch

        score2 = matrix[i][j-1] + gap
        score3 = matrix[i-1][j] + gap
        matrix[i][j] = max(score1, score2, score3)

我得到錯誤代碼Traceback(最近一次通話是最近的):文件“ C:\\ Users \\ Matt \\ workspace \\ ch3skills \\ ch3skills.py”,行67,在矩陣[0] [j] =(matrix [0] [( j-1)] +間隙)
IndexError:列表分配索引超出范圍

錯誤在於定義矩陣。 如果N和M相同,則不會出現錯誤。 使用不同的N和M值,您會發現錯誤。 考慮N = 1和M = 2的情況,您的矩陣是[[0,0],[0,0],[0,0]]。 現在考慮這段代碼:對於范圍(1,(M + 1))中的i:矩陣[i] [0] =(矩陣[(i-1)] [0] +間隙)值1到3,但沒有matrix [3] [0]。 這給出了這樣的錯誤。 我不明白代碼打算做什么。 現在,更改M和N不會再出現任何錯誤。 但是我不確定你是否正在尋找這個。 我還將包括代碼。

s1 = raw_input('1: ')
s2 = raw_input('2: ')
N = len(s1)
M = len(s2)
matrix = [[0 for i in range(N+1)] for j in range(M+1)]
gap = int(raw_input('Enter gap score'))
mismatch = int(raw_input('Enter mismatch score'))
match = int(raw_input('Enter the match score'))

matrix[0][0] = 0

for i in range(1,(M+1)):
    matrix[i][0]=(matrix[(i-1)][0] + gap)

for j in range(1,(N+1)):
    matrix[0][j]=(matrix[0][(j-1)] + gap)  

for i in range(1,M+1):
    for j in range(1,N+1):
        if(s1[j-1] == s2[i-1]):
            score1 = matrix[i-1][j-1] + match

        else:
            score1 = matrix[i-1][j-1] + mismatch

        score2 = matrix[i][j-1] + gap
        score3 = matrix[i-1][j] + gap
        matrix[i][j] = max(score1, score2, score3)

您需要在for循環中切換MN ,如下所示:

for i in range(1,M+1):
    matrix[i][0] = matrix[i-1][0] + gap

for j in range(1,N+1):
    matrix[0][j] = matrix[0][j-1] + gap  

由於您最初制作了M項目,每個項目都是一個長度為N的列表,所以matrix[x]是第x個列表(長度為N )。

另外:1)所有這些括號都增加了太多混亂; 2)numpy將使所有這些變得更加容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM