如何在Python中遍历字符串的长度时遍历字符串

时间:2019-02-21 12:51:54

标签: python loops matrix cs50 index-error

我正在尝试复制此费用矩阵:

cost matrix

目前,我只是在玩用于制作成本矩阵的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:列表索引超出范围”

我该如何解决。此刻,我的输出是:

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) 

1 个答案:

答案 0 :(得分:0)

您在len + 1之上,a_list[i]会抛出IndexError

只需将elif语句更改为

elif a_list[i-1] == b_list[j-1]: