【问题标题】:list equality with recursion Python使用递归 Python 列出相等性
【发布时间】:2016-03-10 03:30:05
【问题描述】:

我正在尝试编写一个程序,该程序使用递归判断 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

【问题讨论】:

    标签: python list recursion


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      你错过了一个案例。在您比较了两个列表的最后一个元素之后,您仍然调用 compare(lst1[1:]...,即使没有任何内容,所以您的下一个调用 lst1[0] 正在查找一个空列表。

      您需要在此之前检查一下,实际上是return True

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

      【讨论】:

        【解决方案3】:

        试试这个:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-17
          • 1970-01-01
          • 2020-02-06
          • 2011-10-04
          • 2015-02-21
          • 2014-05-05
          • 1970-01-01
          相关资源
          最近更新 更多