如何找出列表中的重复嵌套列表并按组返回?
解决嵌套列表重复项分组问题
核心问题:如何比较包含子列表的两个列表是否相等
在Python里,直接用==运算符就能判断这类嵌套列表是否完全相等——它会递归检查每一层的元素,只要所有子列表的内容、顺序完全一致,就会返回True。
实现步骤(以你的输入为例)
- 整理输入列表:把提供的内容转换成标准Python列表结构:
original_data = [ [[1.0, 1.0], [1.0, 10.0], [1.0, 11.0], [1.0, 12.0], [1.0, 13.0]], [[2.0, 1.0], [2.0, 10.0], [2.0, 11.0], [2.0, 12.0], [2.0, 13.0]], [[3.0, 1.0], [3.0, 10.0], [3.0, 11.0], [3.0, 12.0], [3.0, 13.0]], [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]], [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]] ]
- 统计重复项:因为列表不可哈希,不能直接作为字典的键,所以先把每个子列表转成嵌套元组,再用字典统计每个结构对应的原列表:
from collections import defaultdict count_map = defaultdict(list) for item in original_data: # 将嵌套列表转为嵌套元组,作为字典的键 key = tuple(tuple(sub_item) for sub_item in item) count_map[key].append(item)
- 提取重复组:筛选出出现次数≥2的分组,再整理成你需要的格式:
# 提取所有重复的子列表组 duplicate_groups = [group for group in count_map.values() if len(group) > 1] # 把重复项平铺成目标格式的列表 final_result = [] for group in duplicate_groups: final_result.extend(group) print(final_result)
运行后就会得到你想要的输出:
[[[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]], [[4.0, 1.0], [4.0, 10.0], [4.0, 11.0], [4.0, 12.0], [4.0, 13.0]]]
内容的提问来源于stack exchange,提问作者Goob Doy
相关产品推荐
相关产品推荐

