파이썬 라이브러리 heapq
#011 파이썬 라이브러리 : heapq를 이용한 순위 매기기
Python heapq 모듈은 우선순위 큐 알고리즘인 힙 큐 알고리즘의 구현을 제공합니다. heapq 모듈은 힙에서 요소를 추가, 제거 및 조작하기 위해 heappush, heappop, heappushpop, heapreplace 및 nlargest와 같은 기능을 제공합니다. 힙 큐 알고리즘은 컬렉션에서 가장 작은(또는 가장 큰) 요소에 빠르게 액세스해야 하는 애플리케이션에 유용한 데이터 구조입니다.
즉, heapq는 순위가 가장 높은 자료(data)를 가장 먼저 꺼내는 우선순위 큐를 구현한 모듈입니다. 리스트 등을 사용하여 우선순위 큐를 직접 구현하기가 어렵진 않지만, 이보다는 이런 작업에 최적화된 모듈인 heapq를 사용해 보십시오.
heapq의 생성과 요소 추가
# -*- coding:utf-8 -*-
import heapq
# heap 생성
heap = []
# 요소추가
heapq.heappush(heap, 10)
heapq.heappush(heap, 5)
heapq.heappush(heap, 15)
# heap 확인
print(heap) # Output: [5, 10, 15]
# heap에서 heappop으로 요소 제거
smallest = heapq.heappop(heap)
print(smallest) # Output: 5
# heap 확인
print(heap) # Output: [10, 15]
▶ 결과
[5, 10, 15]
▶ 설명
heapq 모듈을 사용하려면 먼저 모듈을 가져와야 합니다. 힙에 요소를 추가하려면 heappush 함수를 사용할 수 있습니다. 이 함수는 힙과 추가할 요소라는 두 개의 인수를 사용합니다. 힙에서 가장 작은 요소를 제거하려면 하나의 인수인 힙을 취하는 heappop 함수를 사용할 수 있습니다.
heappush 및 heappop 외에도 heapq 모듈은 heappushpop, heapreplace 및 nlargest를 포함하여 힙 작업을 위한 몇 가지 다른 기능을 제공합니다.
- heappushpop 함수는 힙에 요소를 추가한 다음 가장 작은 요소를 제거
- heapreplace 함수는 가장 작은 요소를 제거한 다음 새 요소를 힙에 추가합니다.
- nlargest 함수는 힙에서 가장 큰 n개의 요소를 반환합니다.
- nsmallest 함수는 힙에서 가장 작은 n개의 요소를 반환합니다.
결론적으로 Python의 heapq 모듈은 컬렉션에서 가장 작은(또는 가장 큰) 요소에 빠르게 액세스해야 하는 많은 애플리케이션에 유용한 힙 큐 데이터 구조를 구현하는 간단하고 효율적인 방법을 제공합니다.
학생들의 성적 순위를 매기는 프로그램 예제
# -*- coding:utf-8 -*-
import heapq
# Sample dictionary of student names and grades
grades = {'박서준': 78.3, '이서진': 92.5, '김유미': 84.8, '마동석': 90.3, '한석규': 86.7}
# Use heapq to sort the grades in descending order
sorted_grades = heapq.nlargest(len(grades), grades.items(), key=lambda x: x[1])
# Print the sorted grades and student names
for grade in sorted_grades:
print(grade[0], grade[1])
▶ 결과
이서진 92.5
마동석 90.3
한석규 86.7
김유미 84.8
박서준 78.3
▶ 설명
heapq 모듈의 nlargest 함수를 사용하여 사전을 값(즉, 등급) 별로 내림차순으로 정렬합니다. 'nlargest' 함수는 (키, 값) 쌍의 목록을 반환합니다. 여기서 키는 학생 이름이고 값은 성적입니다.
그런 다음 'for' 루프를 사용하여 이 목록을 반복하고 학생 이름과 성적을 등급 내림차순으로 인쇄합니다. 가장 높은 등급을 먼저 인쇄하고 가장 낮은 등급을 마지막에 인쇄합니다.
전반적으로 이 예제는 heapq를 사용하여 사전을 내림차순으로 값별로 정렬하는 방법과 정렬된 결과 데이터를 사용하여 학생 및 성적에 대한 정보를 출력하는 방법을 보여줍니다.
여기서 상위 3명만 보고 싶다면 len(grades) 대신에 3을 주면 됩니다.
꼴찌부터 보려면, heapq.nlargest 대신에 heapq.nsmallest를 사용하면 됩니다.
감사합니다.
Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다. |
'IT > 파이썬 라이브러리 (Python)' 카테고리의 다른 글
#013 파이썬 라이브러리 : bisect를 이용한 학점 부여 (38) | 2023.04.08 |
---|---|
#012 파이썬 라이브러리 : pprint 데이터를 읽기 쉽게 출력 (45) | 2023.04.07 |
#010 파이썬 라이브러리 : collections.defaultdict 딕셔너리 생성 및 초기화 한방에 (46) | 2023.04.05 |
#009 파이썬 라이브러리 : collections.Counter 사용된 단어 수를 세는 (51) | 2023.04.04 |
#008 파이썬 라이브러리 : collections.namedtuple 자료에 이름을 붙이는 (54) | 2023.04.03 |
댓글