如何在Python嵌套列表中查找重复子列表并提取去重结果
Python嵌套列表全局去重解决方案
因为Python中列表属于不可哈希类型,无法直接放入集合完成去重,所以需要先将子列表转为可哈希的元组类型处理,具体实现有两种常用方案:
方案一:无序去重(完全匹配题目中子列表顺序不做要求的需求)
代码实现:data = [[4,5,0],[3,4,0],[4,5,0],[1,2,0],[1,2,0],[4,5,0],[3,4,0],[2,3,0]] # 先将所有子列表转元组放入集合去重,再转回列表格式 unique_data = [list(item) for item in set(tuple(sub_list) for sub_list in data)]该方案时间复杂度为O(n),写法简洁效率高,仅输出结果的子列表顺序和原始数据的首次出现顺序无关。
方案二:保留首次出现顺序的去重
代码实现:data = [[4,5,0],[3,4,0],[4,5,0],[1,2,0],[1,2,0],[4,5,0],[3,4,0],[2,3,0]] seen = set() unique_data = [] for sub_list in data: # 转元组用于哈希判断 temp = tuple(sub_list) if temp not in seen: seen.add(temp) unique_data.append(sub_list)该方案时间复杂度同样为O(n),输出结果的子列表顺序和原始数据中首次出现的顺序完全一致。
你原有代码的问题在于仅做了相邻子列表的等值判断,没有全局存储已出现过的子列表记录,因此无法实现全局去重的效果。
内容的提问来源于stack exchange,提问作者pariskey
相关产品推荐
相关产品推荐

