heapq适用于高效获取极值、实现优先级队列、求解Top K问题、堆排序及合并有序序列;支持O(1)取堆顶、多级排序元组、流式Top K处理、原地排序与内存友好归并。

快速获取最小或最大元素
当程序需要频繁访问集合中的极值,比如监控系统里找响应最慢的请求、日志分析中提取耗时 Top 10 的接口,heapq 提供 O(1) 时间直接读取堆顶(heap[0]),比每次调用 min() 或排序快得多。尤其在数据持续流入的场景下,维护一个堆比反复全量扫描更高效。
实现优先级队列
任务调度、事件循环、消息分发等逻辑常需按优先级处理条目。用元组作为堆元素可自然支持多级排序:例如 (priority, timestamp, task),heapq 会先比 priority,相同时比 timestamp,确保高优且先到的任务优先执行。配合 heappush 和 heappop,就能构建轻量可靠的优先队列。
求解 Top K 问题
从大量数据中选出前 K 小或前 K 大元素,是算法和工程中的高频需求。直接用 heapq.nsmallest(k, iterable) 或 heapq.nlargest(k, iterable) 最简洁;若需流式处理(如逐条读取文件),可手动维护大小为 K 的堆——插入新元素后弹出最大(或最小)者,最终堆内即为所求结果,空间复杂度仅 O(K)。
堆排序与合并有序序列
虽然 Python 内置 sorted() 更常用,但 heapq.heapify() + heappop() 组合能实现原地堆排序,适合内存受限环境。另外 heapq.merge() 可高效合并多个已排序的迭代器(如归并多个日志文件的时间序列),返回一个统一的有序迭代器,无需一次性加载全部数据。
立即学习“Python免费学习笔记(深入)”;
