本文通过一道例题来介绍python中的最小堆
 
 合并K个升序链表
import heapq
ListNode.__lt__ = lambda a, b: a.val < b.val  # 让堆可以比较节点大小
class Solution:    def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:        cur = dummy = ListNode()  # 哨兵节点,作为合并后链表头节点的前一个节点        h = [head for head in lists if head]  # 初始把所有链表的头节点入堆        heapify(h)  # 堆化        while h:  # 循环直到堆为空                              node = heappop(h)  # 剩余节点中的最小节点            if node.next:  # 下一个节点不为空                heappush(h, node.next)  # 下一个节点有可能是最小节点,入堆            cur.next = node  # 合并到新链表中            cur = cur.next  # 准备合并下一个节点        return dummy.next  # 哨兵节点的下一个节点就是新链表的头节点
 
- __lt__特殊方法重载:
 
ListNode.__lt__ = lambda a, b: a.val < b.val   
 
__lt__ 是Python中的一个特殊方法,用于定义小于号 ( < ) 的行为。在这里,通过lambda表达式定义了 ListNode 类的小于号比较行为,使得 ListNode 对象可以比较大小,从而可以用于堆(优先队列)中。
 
- heapq 模块:
 
import heapq
heapify(h)  # 堆化   
 
heapq 是Python标准库中的堆队列算法模块。heapify 函数用于将列表 h 转换为堆(优先队列)。
 
- heappop 和 heappush 函数:
 
node = heappop(h)  # 剩余节点中的最小节点
if node.next:  # 下一个节点不为空    heappush(h, node.next)  # 下一个节点有可能是最小节点,入堆
 
heappop 函数用于从堆中弹出最小的元素, heappush 函数用于将元素插入堆中,并保持堆的性质。
