仅仅是为了练习,我试图在python中编写一个包含循环内循环的函数。但是我得到IndexError: list index out of range
这是函数
def merge(A,B):
c = []
k = 0
i = 0
j = 0
while i < len(A):
while j < len(B):
if A[i] <= B[j]:
c.append(A[i])
i+=1
print c
print i
print k
k=j
else:
c.append(B[j])
j+=1
c.extend(A[i:])
return c
c.extend(B[k:])
return c
这是错误
merge([1,8,9],[2,3,4,11])
[1]
1
0
[1, 2, 3, 4, 8]
2
0
[1, 2, 3, 4, 8, 9]
3
3
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
merge([1,8,9],[2,3,4,11])
File "<pyshell#49>", line 8, in merge
if A[i] <= B[j]:
IndexError: list index out of range
答案 0 :(得分:3)
如果i已经是len(A)-1
,那么你正在中间的if语句中增加i或j - 使用你的样本数据,即2,并且当j <1时递增。 len(B)-1
,因为while j < len(B)
将继续执行,并且在下一轮循环当然i
超出索引到A的界限。您可以在控制台输出中看到当错误发生时,我是3。如果你在print语句中的值之前加上“i =”和“j =”并且还打印len(A)和len(B),那么它会更明显,但是所有信息都可以诊断代码中的错误已经在您的控制台输出中。
我告诉你如何使你的代码不会导致错误。