递归判断二维嵌套列表是否相等的实现问题
递归判断二维嵌套列表是否完全相同的实现方案
要实现这个需求,核心是用索引/切片访问元素替代会修改原列表的操作,同时通过递归逐层拆解列表进行比较:
实现思路
- 终止条件:当两个输入都不是列表时,直接比较它们的值(这里的
==仅用于非列表元素,符合禁止使用列表==运算符的要求)。 - 类型校验:如果一个是列表、另一个不是,直接返回
False。 - 长度校验:两个列表长度不同时,必然不相同,返回
False。 - 递归拆解:对列表的第一个元素递归比较,再对剩余元素组成的子列表递归比较(用切片
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
相关产品推荐
相关产品推荐

