我一直在尝试解决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)
答案 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]
的范围。