算法:IndexError:列表索引超出范围(Python)



我是python的新手,我想知道为什么我的程序在第4行显示"IndexError:list index out range"。有人能帮忙吗。

# A is the array and N is the size of the array.
A =[1,78,46,4,34,10,50,2]
N = len(A)
def Algorithm(A,N):
#B <- Array[N]
B = A[N]
B=[0]*N
for i in range(1,N):
B[A[i]]+=1
i=1
#for i <-- 1 to N
for j in range(1,N):
#for k <-- to B[j]
for k in range(0,B[j]):
A[i]=j
i+=1
return
Algorithm(A,N)
print(A)

错误:

2 N = len(A)
3 def Algorithm(A,N):
4     B = A[N]
5     B=[0]*N
6     for i in range(1,N):

IndexError:列出超出范围的索引

因此List index out of range来自B = A[N],因为N表示A的总长度。但是,列表中的元素的索引从0到N-1,这就给出了长度(N-1) - 0 + 1 => N。如果要将B指定给A的最后一个元素,可以通过B = A[N-1]B = A[-1]来执行,因为负索引从末尾指向列表的元素。然而,如果您重新声明B = [0] * N,则可以取消第一个分配

在Python中,列表的第一个元素被寻址为零而不是一。例如,要访问名为"数字"的列表中的第一个元素,应该写numbers[0],而不是numbers[1]

B = A[N]中,您试图通过访问A[N]来寻址列表A的最后一个元素(N对应于列表A的长度(。然而,正如前面所解释的,您必须从中减去一,因为列表从零开始,而不是从一开始。因此,正确的代码应该是B = A[N - 1]

A =[1,78,46,4,34,10,50,2]
N = len(A)       # N = 8
def Algorithm(A,N):
B = A[N]     # value of N is 8 and when you try to access A[8] its out of index range since the index is from 0 to 7
B=[0]*N
for i in range(1,N):
B[A[i]]+=1
i=1
#for i <-- 1 to N
for j in range(1,N):
#for k <-- to B[j]
for k in range(0,B[j]):
A[i]=j
i+=1
return
Algorithm(A,N)
print(A)

我想指出我在您的代码中注意到的其他事情。

A =[1,78,46,4,34,10,50,2]
N = len(A)       
def Algorithm(A,N):
B = A[N]     
B=[0]*N  # This line overwrites the above assignment. 
for i in range(1,N):
B[A[i]]+=1    # B[A[i]]  -- so i guess during execution the A[i] will be a value from list A . hence B[A[i]] might become B[78] , B[46] etc (sorry if i have misunderstood)
i=1
#for i <-- 1 to N
for j in range(1,N):
#for k <-- to B[j]
for k in range(0,B[j]):
A[i]=j
i+=1
return
Algorithm(A,N)
print(A)

最新更新