Python 라이브러리 - heapq

공식 문서

source code

heapq는 순위가 가장 높은 자료(data)를 가장 먼저 꺼내는 우선순위 큐를 구현한 모듈입니다.

만약 기록이 좋은 순서대로 3명을 자동으로 뽑는 프로그램을 아래처럼 구현할 수 있습니다.

import heapq

data = [
    (19, 'lee'),
    (20, 'park'),
    (12, 'kim'),
    (30, 'cho'),
    (13, 'ki'),
    (43, 'choi'),
]

h = []      # 힙 생성
for score in data:
    heapq.heappush(h, score)    # 힙에 데이터 저장

for i in range(3):
    print(heapq.heappop(h))     # 최솟값부터 힙 반환
# (12, 'kim')
# (13, 'ki')
# (19, 'lee')

heappush()로 튜풀을 추가할 때는 데이터의 우선순위를 나타내는 항목이 첫 번째여야 합니다. 따라서 기록과 이름을 쌍으로 하는 튜플은 (기록, 이름)으로 구성해야 합니다.

이렇게 힙을 구성하면 heapq.heappop()을 이용하여 우선순위 대로 값을 꺼낼 수 있습니다.

heapq.heapify(data)

for i in range(2):
    print(heapq.heappop(data))
# (12, 'kim')
# (13, 'ki')

heapify() 함수를 사용해 간단하게 구현할 수 있습니다. 이때는 data 리스트가 힙 구조에 맞게 변경됩니다.

print(heapq.nsmallest(4, data))
# [(19, 'lee'), (20, 'park'), (30, 'cho'), (43, 'choi')]

nsmallest() 함수를 사용하면 더욱 간단합니다.
heapq.nsmallest(n, iterable)은 반복 가능한 객체(iterable) 데이터 집합에서 n개의 가장 작은 요소로 구성된 리스트를 반환합니다.

 

 

'Python > Python' 카테고리의 다른 글

Python 라이브러리 - enum  (0) 2023.05.16
Python 라이브러리 - pprint  (0) 2023.05.16
Python 라이브러리 - collections  (0) 2023.05.11
Python 라이브러리 - calendar  (0) 2023.05.11
Python 라이브러리 - datetime  (0) 2023.05.11