如何用Python删除主列表中的重复子列表
Python 嵌套子列表去重实现(保留原始顺序)
核心注意点
- 直接对主列表调用内置
set()去重会触发报错:列表属于不可哈希的可变类型,无法直接作为集合的元素。 - 这类嵌套列表去重的核心需求是保留子列表第一次出现的原始顺序,避免乱序输出不符合业务预期。
实现方法1:遍历中转去重(全Python版本兼容,严格匹配输出要求)
将不可哈希的子列表转换为可哈希的元组做重复标记,遍历过程中收集未重复的子列表,完全适配给定的输入场景。
示例代码:
# 给定输入 original_list = [['a','b'],['c','f'],['a','b'],['d','f']] seen = set() filtered_list = [] for sublist in original_list: # 转换为元组用于重复判断,不修改原始子列表的结构 sub_hash = tuple(sublist) if sub_hash not in seen: seen.add(sub_hash) filtered_list.append(sublist)
运行后输出结果为:[['a', 'b'], ['c', 'f'], ['d', 'f']],与期望输出完全一致。
实现方法2:简洁写法(Python 3.7+ 适用)
利用Python 3.7及以上版本中字典的插入有序特性,通过dict.fromkeys自动过滤重复值,精简实现逻辑:
original_list = [['a','b'],['c','f'],['a','b'],['d','f']] # 转元组完成去重后,再转回列表结构匹配输出格式 filtered_list = [list(item) for item in dict.fromkeys(tuple(subl) for subl in original_list)]
两种实现的去重逻辑均不会打乱主列表的原有元素排布,和直接调用set导致的乱序结果有本质区别。
内容的提问来源于stack exchange,提问作者eslam ahmed
相关产品推荐
相关产品推荐

