我正在尝试编写一个程序,告诉两个列表使用递归是否完全相同,它在列表不相同时有效,但是当它们相同时,它会给出一个错误,说明列表索引已经出来范围。我正在写它的方式,我不直接比较列表(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
答案 0 :(得分:1)
你需要一个基础案例。你的逻辑几乎是正确的,它在递归时没有退出点。如果输入空列表会发生什么?
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
答案 1 :(得分:0)
你错过了一个案子。在比较了两个列表的最后一个元素之后,即使没有任何内容,仍然会调用lst1[0]
,因此您的下一个调用return True
正在查找空列表。
您需要在此之前检查并确实if len(lst1) == len(lst2) == 0:
return True
:
/Library/Frameworks/Python.framework/Versions/3.4/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
答案 2 :(得分:0)
试试这个:
def compare (lst1, lst2):
if lst1 and lst2:
if len(lst1) != len(lst2):
return False
if lst1[0] != lst2[0]:
return False
return compare(lst1[1:],lst2[1:])
else:
return True