heapq는 「가장 작은 값을 항상 빠르게 꺼낼 수 있는 자료구조(힙)」를 제공하는 표준 모듈입니다.
우선순위 큐(priority queue) 구현, 최솟값·최댓값 N개 추출, Top-K 알고리즘에 결정적입니다.
기본 사용.
import heapq.
nums = [5, 1, 3, 7, 2].
heapq.heapify(nums) — 리스트를 힙으로 변환(O(n)).
heapq.heappush(nums, 4) — 새 값 추가.
heapq.heappop(nums) — 가장 작은 값 꺼내기.
매번 자동으로 최솟값이 맨 앞에 오도록 정렬됩니다.
Top-K 패턴.
heapq.nsmallest(3, nums) — 가장 작은 3개.
heapq.nlargest(3, nums) — 가장 큰 3개.
전체 정렬 없이 효율적으로 상위 N개만 뽑을 수 있어, 빅데이터 분석에 유용합니다.
최대 힙은 어떻게?
파이썬의 heapq는 최소 힙만 지원하지만 「값에 -1을 곱해 부호 뒤집기」 트릭으로 최대 힙처럼 쓸 수 있습니다.
heapq.heappush(h, -5)로 넣고, -heapq.heappop(h)로 다시 음수를 양수로 돌리는 식입니다.
튜플로 우선순위 + 데이터를 함께 다룰 수 있습니다.
heapq.heappush(tasks, (3, "중요한 일"))처럼 (우선순위, 데이터) 튜플을 넣으면 우선순위 기준으로 정렬됩니다.
Dijkstra 알고리즘, A* 검색, 작업 스케줄러 같은 곳에서 표준입니다.
한 줄 요약
heapq는 최소 힙 기반 우선순위 큐로, 매번 최솟값을 빠르게(O(log n)) 꺼낼 수 있습니다.
nsmallest·nlargest로 Top-K 추출, (우선순위, 데이터) 튜플로 작업 스케줄링에 결정적입니다.
더 알아볼 것
- 힙 자료구조의 원리
- Dijkstra 알고리즘 구현
- Counter.most_common(n)도 heapq 활용