【发布时间】:2019-07-15 09:27:37
【问题描述】:
我正在尝试重现此成本矩阵:
目前,我只是在玩用于制作成本矩阵的 Python 代码。我被卡住了,因为我想要一个 elif 语句,上面写着
elif a_list[i] = b_list[i]:
matrix[i][j] = min( matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,
matrix[i - 1][j - 1])
所以不要在最后一个词上加上 +1。问题是我收到此错误消息“IndexError: list index out of range”
我该如何解决这个问题。目前,我的输出是:
0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
2 2 2 3 4 5 6 7
3 3 3 3 4 5 6 7
4 4 4 4 4 5 6 7
应该是
0 1 2 3 4 5 6 7
1 1 2 3 4 5 6 7
2 2 1 2 3 4 5 6
3 3 2 2 3 4 5 6
4 4 3 3 3 4 5 6
我的整个代码 atm 是:
import numpy as np
a = 'harvard'
b = 'yale'
a_list = list(a)
b_list = list(b)
#print(a_list)
#print(b_list)
matrix = []
for i in range(len(a_list) + 1):
matrix.append([])
for i in range(len(a_list) + 1):
for j in range(len(b_list) + 1):
matrix[i].append(j)
if i == 0:
matrix[i][j] = j
elif j == 0:
matrix[i][j] = i
#elif a_list[i] == b_list[j]:
# matrix[i][j] = min( matrix[i - 1][j] + 1,
# matrix[i][j - 1] + 1,
# matrix[i - 1][j - 1])
else:
matrix[i][j] = min( matrix[i - 1][j] + 1,
matrix[i][j - 1] + 1,
matrix[i - 1][j - 1] + 1)
for mat in zip(*matrix):
print(*mat)
【问题讨论】:
-
matrix[i - 1][j]将提高IndexError如果i = 0(对于 j 相同) -
如果我使用“elif i == 2:”,它会产生我想要的结果。因为单词的第二个字母是相同的 yAle 和 hArvard。但是,即使我选择两个不同的词,我也希望它能够工作。这就是为什么我想比较 a_list[i] 和 b_list[i]
标签: python loops matrix cs50 index-error