我试图解决以下问题:
编写一个递归函数:
isEqual(list1, list2)
,返回一个布尔值,表示是否 两个列表相等而不直接比较list1 == list2
。你只能比较它的长度 列出并测试各个列表元素是否相等。 [提示:两个列表是"相等" iff它们的长度相同 并且每个对应的元素都是相同的]
这是到目前为止所做的,但我被困住了。有任何帮助吗?
def isEqual(list1, list2):
if len(list1) and len(list2) < 1:
return True
elif len(list1) == len(list2) and list1[-1] == list2[-1]:
isEqual(list1[:-1], list2[:-1]) + isEqual
return True
else:
return False
答案 0 :(得分:0)
这不起作用:
if len(list1) and len(list2) < 1:
这是在问:
if (len(list1)) and (len(list2) < 1):
你能看出区别吗?你要写的是:
if len(list1) < 1 and len(list2) < 1:
这可以缩短为:
if not list1 and not list2:
因为空列表为假(非空列表为真)。
你有正确的想法,但你的执行是错误的。您正确地在两个剩余列表上调用该功能,但您正在做一些您不需要的奇怪的事情。
isEqual(list1[:-1], list2[:-1]) + isEqual
return True
应该只是
return isEqual(list1[:-1], list2[:-1])
因为如果列表长度相同,并且尾随元素相等,那么如果它们的list[:-1]
相等,则列表相等。
作为旁注,大多数时候人们比较第一个元素,然后是第二个元素,依此类推。您是否有任何特殊原因从列表末尾开始?