python错误 - “IndexError:列表索引超出范围”

时间:2016-04-13 21:42:21

标签: python dynamic-programming

我是Python的新手,所以如果这是一个非常愚蠢的问题,我会事先道歉。差不多,我正在编写一个动态编程最常见的子序列算法 每当我尝试运行它时,我得到IndexError: list index out of range,我不知道为什么因为我正在添加值的数组永远不会改变大小。为清晰起见,代码段:

def LCS(sequence1, sequence2):
    n = len(sequence1)
    m = len(sequence2)
    D = [[0 for num in range(0,n)]for number in range(0, m)]
    for i in range(1, n):
        for j in range(1, m):
            if(sequence1[i] == sequence2[j]):
                D[i][j] = D[i-1][j-1] + 1
            else:
                D[i][j] = max(D[i-1][j], D[i][j-1])
    print D[n][m]

2 个答案:

答案 0 :(得分:1)

似乎有两个问题:

  1. memPointer += actualSize; printf("&mem_arr[0] = %p, memPointer = %p\n", &mem_arr[0], memPointer); 的定义中,您应该交换Dn

    m
  2. 您必须打印(或更好地:返回)矩阵的最后一个元素

    D = [[0 for num in range(0, m)] for number in range(0, n)]
    

答案 1 :(得分:0)

问题在于矩阵(D)的总行数和列数。大小应为(m+1)*(n+1),然后循环遍历矩阵。否则你需要返回D [m-1] [n-1]。

def LCS(sequence1, sequence2):
    n = len(sequence1)
    m = len(sequence2)
    D = [[0 for num in range(0,n+1)]for number in range(0, m+1)]
    for i in range(1, n+1):
        for j in range(1, m+1):
            if(sequence1[i-1] == sequence2[j-1]):
                D[i][j] = D[i-1][j-1] + 1
            else:
                D[i][j] = max(D[i-1][j], D[i][j-1])

    print D[n][m]

LCS('abcdef' , 'defjkl')