已排序嵌套列表如何按子列表前两位去重并保留第三位最小项
你的思路完全正确,因为原列表已经按子列表最后一位升序排列,首次出现的前两位组合对应的一定是最后一位最小的条目,直接按这个逻辑实现即可:
实现代码
l_of_l = [ [1,2,1], [3,4,2], [3,4,5], [3,4,7], [9,10,8], [11,12,9] ] seen_keys = set() new_list = [] for sub_list in l_of_l: # 取前两位作为去重键,转元组存入集合(列表不可哈希,元组支持) unique_key = tuple(sub_list[:-1]) if unique_key not in seen_keys: seen_keys.add(unique_key) new_list.append(sub_list) # 输出验证 print(new_list)
运行后输出正好符合预期:[[1, 2, 1], [3, 4, 2], [9, 10, 8], [11, 12, 9]]
方案说明
- 全程只遍历一次原列表,时间复杂度为O(n),执行效率很高
- 天然支持子列表元素为整数、字符串等所有可哈希、可比较的类型,不需要额外适配
- 如果后续遇到未提前排序的列表,只需要先加一行排序代码即可复用逻辑:
# 按子列表最后一位升序排序,兼容数字、字符串比较 l_of_l.sort(key=lambda x: x[-1])
内容的提问来源于stack exchange,提问作者Alex V
相关产品推荐
相关产品推荐

