定义一个包含两个列表的递归函数

时间:2016-10-21 20:17:32

标签: python recursion

我试图解决以下问题:

  

编写一个递归函数: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

1 个答案:

答案 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]相等,则列表相等。

作为旁注,大多数时候人们比较第一个元素,然后是第二个元素,依此类推。您是否有任何特殊原因从列表末尾开始?