IndexError:列表索引超出嵌套列表(矩阵)的范围

时间:2020-06-06 18:38:11

标签: python

我一直在尝试解决HackerRank上的问题,这是我的解决方案,我在第21行收到此错误IndexError: list index out of range,即s_sum += arr[i][n-1],有人可以帮助我吗弄清楚这个吗?

def diagonalDifference(arr):
    p_sum = 0
    s_sum = 0
    for i in range(n):
        p_sum += arr[i][i]
        s_sum += arr[i][n-i]
    return abs(p_sum - s_sum)

n = int(input().strip())
arr = []
for _ in range(n):
    arr.append(list(map(int, input().rstrip().split())))
result = diagonalDifference(arr)
print(result)

3 个答案:

答案 0 :(得分:1)

i = 0时,即在for循环的第一次迭代中,n-i的计算结果为n,但是如果arr超出范围大小为n

答案 1 :(得分:1)

循环时-

for i in range(n):
    p_sum += arr[i][i]
    s_sum += arr[i][n-i]

在这里,我从0开始,您有_sum += arr[i][n-1],在第一次迭代中将为arr[0][n]。由于您的arr最多只能索引arr[i][n-1],因此这将超出范围。因此,这给您list index out of range个错误。

您应该按照以下说明正确进行操作-

for i in range(n):
    p_sum += arr[i][i]       #primary diagonal sum
    s_sum += arr[i][(n-1)-i] #secondary diagonal sum. notice the indexing arr[i][n-1-i] 
                             #which ensures that the array doesn't access out of its bounds

希望这会有所帮助!

答案 2 :(得分:1)

因为运行,您得到超出范围错误

s_sum += arr[i][n-i]

for范围[0:n-1]。因此,当i = 0的第二个索引变为n时,这将超出尝试访问arr[0][n]的范围。