我是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)