개요
2023.10.20 - [자료구조] 우선순위 큐 (Priority Queue)에서 우선순위 큐에 대해 살펴보았는데, 이 글에서는 Python에서 우선순위 큐를 제공하는 Priority Queue 클래스를 사용하는 방법을 정리해두려고 한다.
Python queue.PriorityQueue는 내부적으로 heapq로 구현되어 있다.
클래스 임포트
PriorityQueue 클래스를 사용할 때는 아래와 같이 임포트 하여 사용할 수 있다. queue는 내장 모듈이므로 추가적인 라이브러리 설치는 필요하지 않다.
from queue import PriorityQueue
선언
생성자를 사용하여 PriorityQueue를 선언한다. 큐의 최대 크기가 정해져 있다면 maxsize로 크기를 전달할 수있다. 큐의 크기에 최대 크기에 도달하면 큐에서 원소가 소비될 때까지 원소를 추가할 수 없다.
q = PriorityQueue()
size_q = PriorityQueue(maxsize=3)
print(q)
print(size_q.queue)
참고로 PriorityQueue 객체는 그냥 print를 하면 메모리 주소가 출력되므로 내부 원소를 출력할 때는 queue 속성을 이용한다.
데이터 추가/삭제
데이터 추가
PriorityQueue에 데이터를 추가할 때는 put 함수를 사용한다. 만역 우선순위를 주면서 값을 추가할 때는 (우선순위, 값) 형식의 튜플을 이용할 수 있다. 숫자값이 낮을수록 우선순위가 높다.
q = PriorityQueue()
q.put('b')
q.put('a')
q.put('c')
print(q.queue)
q = PriorityQueue()
q.put((1, 'b'))
q.put((2, 'a'))
q.put((3, 'c'))
print(q.queue)
데이터 삭제
get 함수를 사용하면 PriorityQueue에서 원소를 삭제하면서 값을 반환받을 수 있다.
q = PriorityQueue()
q.put((1, 'b'))
q.put((2, 'a'))
q.put((3, 'c'))
print(q.get())
print(q.queue)
empty / full
PriorityQueue 클래스는 객체가 비어있는지, 아니면 전부 차있는지 확인하는 함수를 제공한다.
empty
empty 함수는 객체가 비어있는지를 확인할 때 사용한다.
q = PriorityQueue()
print(q.empty())
q.put((1, 'b'))
q.put((2, 'a'))
q.put((3, 'c'))
print(q.empty())
full
full 함수는 empty와 반대로 객체가 전부 차있는지 확인한다. 당연하지만 큐의 최대 크기가 정해져 있어야 한다.
q = PriorityQueue(maxsize=3)
print(q.full())
q.put((1, 'b'))
q.put((2, 'a'))
q.put((3, 'c'))
print(q.full())
참고 문서
https://www.daleseo.com/python-priority-queue/
https://docs.python.org/3/library/queue.html#queue.PriorityQueue