Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 우선 순위 대기열:가이드

Python 우선 순위 대기열:가이드

Python 우선 순위 대기열은 데이터를 특정 순서로 저장합니다. Python에서 우선순위 큐를 구현하는 방법에는 큐 클래스를 사용하는 방법과 heapq 모듈을 사용하는 방법이 있습니다.

목록에 있는 각 항목의 값을 기준으로 데이터를 주문할 수 있습니다. 예를 들어, 가장 높은 값이 목록의 맨 처음에 표시되고 가장 낮은 값이 목록의 마지막에 나타나도록 할 수 있습니다.

이것이 우선순위 큐가 들어오는 곳입니다. 우선순위 큐는 키 값을 기준으로 데이터를 오름차순으로 저장하는 데이터 구조입니다. 이렇게 하면 대기열에서 가장 작은 값과 가장 큰 값에 쉽게 액세스할 수 있습니다.

이 자습서에서는 목록을 사용하여 우선 순위 대기열을 생성하지 말아야 하는 이유에 대해 설명합니다. Python 우선 순위 대기열을 만드는 데 사용할 수 있는 두 가지 더 효율적인 접근 방식을 보여드리겠습니다.

Python 우선 순위 대기열이란 무엇입니까?

우선 순위 큐는 가장 높은 우선 순위를 갖는 요소의 순서로 데이터를 저장하는 큐의 수정된 버전입니다. 우선순위 큐에 있는 각 요소의 우선순위는 해당 요소의 값에 따라 결정됩니다.

컴퓨터 과학에서 큐는 FIFO(선입 선출) 순서로 항목을 저장하는 데이터 구조입니다. 이 구조를 사용하는 것이 도움이 될 수 있는 몇 가지 시나리오가 있습니다.

예를 들어 레스토랑의 주문 추적 앱을 구축한다고 가정합니다. 먼저 주문하는 사람이 다음에 주문하는 사람보다 먼저 서빙해야 합니다. 주문을 추적하려면 대기열을 사용하는 것이 좋습니다.

Python에서 우선 순위 대기열을 정의하는 두 가지 방법이 있습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

  • PriorityQueue 대기열 클래스 사용
  • heapq 모듈 사용

목록 구조를 사용하여 우선 순위 대기열을 정의할 수 있습니다. 그러나 이 전략은 PriorityQueue 큐 클래스나 heapq 모듈을 사용하는 것보다 효율성이 떨어집니다.

Priority Queue Python:queue.PriorityQueue

queue.PriorityQueue 클래스는 Python 우선 순위 대기열을 생성합니다. 이 클래스는 Python 큐 라이브러리의 일부입니다. 이 클래스를 사용하려면 대기열 라이브러리를 가져와야 합니다. PriorityQueue에서 항목을 검색하려면 get() 메서드를 사용할 수 있습니다.

PriorityQueue 클래스에 액세스하려면 이 Python import 문을 사용하여 코드로 가져와야 합니다.

from queue import PriorityQueue

지역 콘서트 티켓 소지자를 위한 우선 순위 대기열을 생성한다고 가정합니다. 다음 코드를 사용하여 그렇게 할 수 있습니다.

from queue import PriorityQueue

ticket_holders = PriorityQueue()

ticket_holders.put((3, 'Paul'))
ticket_holders.put((1, 'Miles'))
ticket_holders.put((2, 'Dani'))

while not ticket_holders.empty():
	item = ticket_holders.get()
	print(item)

코드 반환:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

우리 코드에서는 먼저 queue에서 PriorityQueue 클래스를 가져옵니다. 라이브러리를 선택한 다음 ticket_holders라는 우선 순위 대기열을 초기화합니다. . 다음으로, 티켓 번호와 티켓과 관련된 이름을 저장하는 우선 순위 대기열에 세 개의 튜플을 삽입합니다.

Python while 루프를 사용하여 ticket_holders의 각 항목을 실행합니다. 우선 순위 큐. 그런 다음 get()을 사용하여 해당 항목을 검색합니다. .

queue.PriorityQueue 이 방법은 효율적이고 사용하기 쉽기 때문에 우선 순위 대기열을 생성해야 할 때 탁월한 선택입니다.

우선순위 큐 Python heapq 모듈

heapq 모듈을 사용하면 Python 우선 순위 대기열을 정의할 수 있습니다. heapq 데이터 구조는 우선 순위에 따라 항목을 제거합니다. heapq 구조에서 가장 낮은 값이 가장 낮은 우선순위를 가지며 가장 높은 값이 가장 높은 우선순위를 갖습니다.

heapq 모듈을 사용하려면 먼저 다음 import 문을 사용하여 코드로 가져와야 합니다.

import heapq

이전 예제로 돌아가 보겠습니다. 콘서트 티켓 소지자에 대한 정보를 저장하기 위해 우선 순위 대기열을 생성한다고 가정합니다. heapq 모듈과 다음 프로그램을 사용하여 그렇게 할 수 있습니다.

import heapq

ticket_holders = []

heapq.heappush(ticket_holders, (3, 'Paul'))
heapq.heappush(ticket_holders, (1, 'Miles'))
heapq.heappush(ticket_holders, (2, 'Dani'))

while ticket_holders:
	item = heapq.heappop(ticket_holders)
	print(item)

코드 반환:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

먼저 heapq 라이브러리를 가져온 다음 ticket_holders라는 Python 변수를 초기화했습니다. . heappush()를 사용했습니다. 세 개의 튜플을 우선 순위 대기열에 푸시하는 메서드입니다. 이 대기열은 각 티켓 소지자의 티켓 번호와 각 티켓 소지자의 이름을 저장합니다.

그런 다음 우선 순위 대기열의 각 항목을 반복하는 while 루프를 만들었습니다. 이 루프는 heappop()을 사용하여 큐의 맨 위에 있는 항목을 제거합니다. . 그런 다음 제거된 항목이 콘솔에 인쇄됩니다. 보시다시피 대기열의 모든 항목은 우선 순위에 따라 인쇄됩니다.

목록을 유지하면 안 되는 이유

기술적으로 Python 목록 데이터 구조를 사용하여 우선 순위 대기열을 만들 수 있습니다. 그렇게 하려면 목록을 만든 다음 오름차순으로 정렬합니다.

그러나 이것은 우선 순위 대기열을 유지 관리하는 상대적으로 비효율적인 방법입니다. 목록에서 항목을 변경할 때 목록을 다시 정렬해야 하므로 시간이 걸립니다.

몇 가지 값만 저장해야 하는 경우 기존 목록을 우선 순위 대기열로 사용할 수 있습니다. 그러나 더 큰 대기열을 만들려는 경우 목록은 좋은 선택이 아닙니다.

참고로 목록을 사용하는 우선순위 큐의 예를 살펴보겠습니다. 콘서트에 먼저 입장해야 하는 티켓 소지자의 순서를 저장하는 우선 순위 대기열을 생성한다고 가정합니다. 다음 코드를 사용하여 이 대기열을 만들 수 있습니다.

ticket_holders = []

ticket_holders.append((3, 'Paul'))
ticket_holders.append((1, 'Miles'))
ticket_holders.append((2, 'Dani'))

ticket_holders.sort(reverse=True)

while ticket_holders:
	item = ticket_holders.pop()
	print(item)

코드 반환:

(1, 'Miles')
(2, 'Dani')
(3, 'Paul')

티켓 소지자라는 목록을 만들었습니다. , 그런 다음 목록에 3개의 튜플을 추가했습니다. 각 튜플에는 티켓 소지자의 티켓 번호와 이름이 포함되어 있습니다. 그런 다음 Python sort() 티켓 소지자 목록을 역순으로 정렬하는 기능입니다.

ticket_holders의 모든 항목을 반복하는 while 루프를 만들었습니다. 목록과 목록 맨 위에 있는 항목. 그런 다음 코드에서 제거된 항목을 콘솔에 인쇄합니다.

결론

우선 순위 대기열을 만드는 데 가장 일반적인 두 가지는 heapq 모듈 또는 queue.PriorityQueue를 사용하는 것입니다. 수업. 기술적으로 목록을 우선 순위 대기열로 사용할 수 있지만 이 접근 방식은 확장성이 좋지 않습니다.

이 자습서에서는 예제를 참조하여 Python에서 우선 순위 대기열을 만드는 방법에 대해 설명했습니다. 이제 Python 전문가처럼 우선 순위 대기열을 만드는 데 필요한 지식을 갖추게 되었습니다!

Python 학습 방법에 대한 자세한 내용은 전체 Python 학습 방법 가이드를 확인하세요.