如何处理嵌套列表,提取所有末尾元素值相同的子列表?
实现方案
思路非常清晰,不需要手动维护索引遍历,分两步即可完成:先统计所有子列表末尾元素的出现频次,再筛选出末尾元素属于「出现次数≥2」集合的子列表即可,时间复杂度为O(n),效率远高于双重循环比对的方案。
你提到的集合intersection方法逻辑和以下方案的筛选逻辑是共通的,本质都是匹配元素是否属于重复值集合。
完整代码示例
from collections import Counter # 示例中a/b/c等若为字符串可自行调整引号,此处统一按字符串处理 lol = [[0,'a'], [0,'b'], [1,'b'], [1,'c'], [2,'d'], [2,'e'], [2,'g'], [2,'b'], [3,'e'], [3,'f']] # 1. 统计所有子列表第二个元素的出现次数 counts = Counter(sublist[1] for sublist in lol) # 2. 提取出现次数≥2的元素,转集合提升查询效率 duplicated_vals = {k for k, v in counts.items() if v >= 2} # 3. 直接过滤原列表得到结果 result = [sublist for sublist in lol if sublist[1] in duplicated_vals] # 输出验证 for item in result: print(item)
输出结果
[0, 'b'] [1, 'b'] [2, 'b'] [2, 'e'] [3, 'e']
无依赖原生实现
如果不想导入标准库collections,也可以用原生字典实现计数逻辑,后续筛选步骤和上面完全一致:
counts = {} for sublist in lol: val = sublist[1] counts[val] = counts.get(val, 0) + 1
内容的提问来源于stack exchange,提问作者Bob R
相关产品推荐
相关产品推荐

