1. 创建堆与基本操作
import heapq
# 创建一个列表
data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 将列表转换为堆(原地转换)
heapq.heapify(data)
print("堆结构:", data) # 输出: [1, 1, 2, 3, 3, 9, 4, 6, 5, 5, 5]
# 向堆中添加元素
heapq.heappush(data, 0)
print("添加0后:", data) # 输出: [0, 1, 1, 3, 3, 2, 4, 6, 5, 5, 5, 9]
# 从堆中弹出最小元素
min_val = heapq.heappop(data)
print("弹出元素:", min_val) # 输出: 0
print("弹出后堆:", data) # 输出: [1, 1, 2, 3, 3, 9, 4, 6, 5, 5, 5]
2. 组合操作:heappushpop和heapreplace
import heapq
heap = [2, 5, 7, 9]
heapq.heapify(heap)
# heappushpop: 先push再pop
result = heapq.heappushpop(heap, 3)
print("heappushpop结果:", result) # 输出: 2
print("当前堆:", heap) # 输出: [3, 5, 7, 9]
# heapreplace: 先pop再push
result = heapq.heapreplace(heap, 4)
print("heapreplace结果:", result) # 输出: 3
print("当前堆:", heap) # 输出: [4, 5, 7, 9]
3. 查找N个最大或最小元素
import heapq
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 查找最小的3个元素
smallest = heapq.nsmallest(3, numbers)
print("最小的3个元素:", smallest) # 输出: [1, 1, 2]
# 查找最大的3个元素
largest = heapq.nlargest(3, numbers)
print("最大的3个元素:", largest) # 输出: [9, 6, 5]
发表评论