Python中基于指定列表过滤类对象列表并排序的高效实现方法
可以通过集合加速过滤判断+链式处理实现需求,该方案时间复杂度最优,代码简洁易维护:
实现代码
# 把待删除列表转成集合,in查询时间复杂度从O(n)降到O(1),数据量越大优势越明显 drop_set = set(to_be_dropped_lst) # 一次性完成过滤、按num升序排序、提取col_name属性 res = [ person.col_name for person in sorted( (p for p in main_lst if p.col_name not in drop_set), key=lambda x: x.num ) ] print(res) # 输出结果:['E', 'D', 'A']
方案说明
- 过滤环节使用生成器表达式,不会产生额外的中间列表,内存占用更低,适合处理大规模数据。
- 整体时间复杂度为O(n log n),由排序环节决定,是该需求下的最优时间复杂度。
- 排序规则可灵活调整,如需倒序排序只需在
sorted方法中添加reverse=True参数即可。
内容的提问来源于stack exchange,提问作者user3104352
相关产品推荐
相关产品推荐

