我正在尝试编写一个程序,使用递归告诉2个列表是否完全相同,当列表不相同时它可以工作,但是当它们相同时,它给我一个错误,指出列表索引超出范围。我编写它的方式不是直接比较列表(lst1 == lst2)。我只是比较列表的单个元素和列表的长度。

def compare (lst1, lst2):
    if len(lst1) != len(lst2):
        return False
    if lst1[0] != lst2[0]:
        return False
    return compare(lst1[1:],lst2[1:])


例:

>>> compare(['ispython',1,2,3], ['isPYthon',1,2,3])
False
>>> compare(['ispython',1,2,3], [1,2,3])
False
>>> compare(['ispython',1,2,3], ['ispython',1,2,3])
True

最佳答案

您需要一个基本案例。您的逻辑几乎是正确的,它在递归上没有出口。如果您输入空白列表会怎样?

if len(lst1) != len(lst2):
    return False


每个列表的长度为0,因此不会在此处返回。

if lst1[0] != lst2[0]:
    return False


lst1[0]不存在,lst2[0]也不存在,这是发生索引错误的地方。尝试添加以下内容:

if len(lst1) == 0 == len(lst2) == 0:
    return True

07-24 15:09