You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归判断二维嵌套列表是否相等的实现问题

递归判断二维嵌套列表是否完全相同的实现方案

要实现这个需求,核心是用索引/切片访问元素替代会修改原列表的操作,同时通过递归逐层拆解列表进行比较:

实现思路

  1. 终止条件:当两个输入都不是列表时,直接比较它们的值(这里的==仅用于非列表元素,符合禁止使用列表==运算符的要求)。
  2. 类型校验:如果一个是列表、另一个不是,直接返回False。
  3. 长度校验:两个列表长度不同时,必然不相同,返回False。
  4. 递归拆解:对列表的第一个元素递归比较,再对剩余元素组成的子列表递归比较(用切片a[1:]生成新子列表,完全不修改原列表)。

代码实现

def is_equal(a, b):
    # 处理非列表元素的情况
    if not (isinstance(a, list) and isinstance(b, list)):
        return a == b
    # 列表长度不同直接返回False
    if len(a) != len(b):
        return False
    # 空列表直接相等
    if len(a) == 0:
        return True
    # 递归比较第一个元素 + 剩余子列表
    return is_equal(a[0], b[0]) and is_equal(a[1:], b[1:])

验证示例

  • 测试is_equal([[1,2,3],[4,5,6]], [[1,2,3],[4,5,6]])返回True
  • 测试is_equal([[1,2,3],[4,5,6]], [[1,2,3],[4,5]])返回False
  • 嵌套更深的场景:is_equal([[1,[2,3]],4], [[1,[2,3]],4])返回True,is_equal([[1,[2,3]],4], [[1,[2]],4])返回False

为什么不用pop?

pop()会直接修改原列表的结构,而切片a[1:]是创建原列表的副本片段,完全不会改动输入的原始列表,完美符合需求。

内容的提问来源于stack exchange,提问作者Dr.jj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:40:39