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)
我得到了错误代码
追溯(最近一次通话):
文件 "C:\Users\Matt\workspace\ch3skills\ch3skills.py",第 67 行,位于
矩阵[0][j]=(矩阵[0][(j-1)] + 间隙)
IndexError: 列表赋值索引超出范围
您需要在 for
循环中切换 M
和 N
,如下所示:
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 会让这一切变得更容易。
错误与定义矩阵有关。如果 N 和 M 相同,则不会出现错误。使用不同的 N 和 M 值,您会发现错误。考虑 N=1 和 M=2 的情况,您的矩阵是 [[0, 0], [0, 0], [0, 0]]。现在考虑这段代码:
对于我在范围内(1,(M + 1)):
矩阵[i][0]=(矩阵[(i-1)][0] + 间隙)
如果你的 i 的值为 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)
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)
我得到了错误代码
追溯(最近一次通话):
文件 "C:\Users\Matt\workspace\ch3skills\ch3skills.py",第 67 行,位于
矩阵[0][j]=(矩阵[0][(j-1)] + 间隙)
IndexError: 列表赋值索引超出范围
您需要在 for
循环中切换 M
和 N
,如下所示:
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 会让这一切变得更容易。
错误与定义矩阵有关。如果 N 和 M 相同,则不会出现错误。使用不同的 N 和 M 值,您会发现错误。考虑 N=1 和 M=2 的情况,您的矩阵是 [[0, 0], [0, 0], [0, 0]]。现在考虑这段代码: 对于我在范围内(1,(M + 1)): 矩阵[i][0]=(矩阵[(i-1)][0] + 间隙) 如果你的 i 的值为 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)