【问题标题】:How do I iterate over string while iterating over the length of that string in Python如何在 Python 中迭代字符串的长度时迭代字符串
【发布时间】:2019-07-15 09:27:37
【问题描述】:

我正在尝试重现此成本矩阵:

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: 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


【解决方案1】:

a_list[i] 超过 len+1 将抛出 IndexError

只需将elif 语句更改为

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2014-04-21
    • 2015-11-28
    • 2020-06-20
    相关资源
    最近更新 更多