Python结合集合与列表处理嵌套整型列表提取匹配子列表首元素
实现方案
核心优化点
- 先将
check_list转换为集合,成员查询时间复杂度从O(n)降至O(1),数据量越大性能提升越明显 - 使用
any()做存在性判断,匹配到符合条件的元素就会提前终止遍历子列表,避免无效计算
实现代码
# 先转换为集合提速 check_set = set(check_list) # 一行列表推导完成逻辑 new_list = [sublist[0] for sublist in incoming_list if any(num in check_set for num in sublist)]
逻辑说明
遍历incoming_list的每一个子列表:
- 用
any()判断当前子列表中是否存在属于check_set的元素 - 存在则取该子列表的第一个元素加入结果列表,不存在则跳过
可选扩展
如果要求结果列表去重,分两种场景处理:
- 不需要保留子列表原有匹配顺序:直接用集合推导再转列表
new_list = list({sublist[0] for sublist in incoming_list if any(num in check_set for num in sublist)}) - 需要保留原有匹配顺序(Python3.7+支持):用字典去重
new_list = list(dict.fromkeys(sublist[0] for sublist in incoming_list if any(num in check_set for num in sublist)))
原代码问题说明
你之前的代码错误将嵌套列表拆分为了键值对k,v,且判断的是索引k是否在校验列表中,完全不符合「判断子列表内元素是否属于校验列表」的需求逻辑。
内容的提问来源于stack exchange,提问作者cdub
相关产品推荐
相关产品推荐

