嵌套列表按末尾重复值分组筛选保留最高第二元素子列表的方法
嵌套列表分组筛选实现方案
实现思路
借助分组映射的方式,可以在单次遍历原列表的过程中完成所有筛选操作,不需要多次循环:
- 把每个子列表的末尾值作为分组的唯一标识
- 遍历到同组的子列表时,对比当前条目和已存条目的第二位置数值,保留更大的那个
- 因为原列表已经按末尾值排好序,只要按遍历顺序记录分组,最后提取结果时自然就符合示例的输出顺序
可直接复用的代码
先放置题目给出的初始输入:
List = [[1,1.5,3],[2,1,3],[4,0,3],[2,3,2],[1,4,2],[1,2,1],[1,1,1],[3,1,1]]
核心实现部分:
from collections import OrderedDict group = OrderedDict() for sub in List: key = sub[-1] if key in group: # 同组内比较第二元素,保留更大值对应的条目 if sub[1] > group[key][1]: group[key] = sub else: group[key] = sub newList = list(group.values())
运行验证:
print(newList) # 输出结果与示例完全匹配:[[1, 1.5, 3], [1, 4, 2], [1, 2, 1]]
补充提示:Python3.7及以上版本的内置字典默认保留插入顺序,不需要额外导入
OrderedDict,直接用普通字典{}就可以实现同样效果。
方案优势
- 整体只需要一次遍历原列表,时间复杂度为O(n),处理大列表时性能远优于先全量分组再逐组找最大值的写法
- 完全适配场景中*“第二元素无相等值、每组存在唯一最大值”*的前提,不需要写额外的并列判断逻辑
- 因为按原列表的遍历顺序记录分组,最终结果的顺序和原列表的末尾值排序规则一致,不需要额外做结果排序
内容的提问来源于stack exchange,提问作者Deemo
相关产品推荐
相关产品推荐

