Python:Cross在循环中连接循环

时间:2016-10-09 08:22:57

标签: python python-2.7 python-3.x

仅仅是为了练习,我试图在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

1 个答案:

答案 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),那么它会更明显,但是所有信息都可以诊断代码中的错误已经在您的控制台输出中。

我告诉你如何使你的代码不会导致错误。