라이브러리&Module

숫자에 이름을 붙여 사용하려면?(#heapq)(do it! 점프 투 파이썬-ch03)

JackSmith 2023. 1. 21.

이번에는! 3장의 <다양한 데이터 다루기> 편을 다룰건데요!

제가 이번편에서는 그냥 느낌가는 대로 공부해서 살짝 순서가 맞지 않을 수도 있습니다!

(양해 부탁드립니다!ㅜㅠ)

이번시간에는 heapq를 사용해서, 수상자 3명(점수가 가장 높은사람 3명)을 선정해보겠습니다.

(출처의 예제랑 살짝? 다르게 짜보았습니다;;ㅎㅎ;;;)

 

heapq란?

순서가 가장 높은 자료를 가장 먼저 꺼내는 우선순위 큐를 구현한 모듈(라이브러리)입니다.

(물론, 리스트 등을 이용하여 우선순위 큐를 직접 구현하는게 가능하지만,,

이미 이런 모듈이 있으니, 여기서는 그냥 가져다가 쓰는거에 초점을 맞추겠습니다.

실무에서 이거를 가져다 쓰지, 리스트로 직접 만들어서 쓰는 사람,,, 당연히 없겠죠?ㅎㅎ)

 

아래와 같이 각 선수들의 점수결과가 나왔다고 가정합시다.

이때 가장 점수가 높은 사람 TOP3와,

가장 점수가 낲은 사람 TOP3를 뽑아볼까요?

import heapq as hq

data = [
    (12.23, "강보람"),
    (12.31, "김지원"),
    (11.98, "박시우"),
    (11.99, "장준혁"),
    (11.67, "차정웅"),
    (12.02, "박중수"),
    (11.57, "차동현"),
    (12.04, "고미숙"),
    (11.92, "한시우"),
    (12.22, "이민석"),
]

print("""점수가 가장 낮은 사람 TOP3를 뽑자면?
""", hq.nsmallest(3, data))

print("""점수가 가장 높은 사람 TOP3를 뽑자면?
""", hq.nlargest(3, data))

위와 같이 코드를 짜고 실행을 해보면, 원하는 결과를 얻을 수 있습니다.

지금까지 우선순위큐(heapq) 모듈을 가져와서 

 

주의>

데이터를 넣을때, 우선순위를 결정하는 요소(점수/기록)가 첫번째 항목에 와야 합니다.

만약 순서를 바꾸면, 에러가 발생하니 주의해주세요!

참고>

아래와 같이 작성해도 점수가 가장 낮은 사람 TOP3를 뽑을 수 있다.

더 알아보기>

이 부분은 그냥 읽고 "아 그렇구나~"하고

넘어가시면 좋을 것 같아서 한번 넣어보았습니다.

저희가 위 import문에서 heap를 가져왔는데요,

그 실체가 무엇이냐?!?

저와 같이 Anaconda3를 설치했을 경우,

내 PC > 로컬 디스크 > 사용자 > {사용자명} > anaconda3 > Lib 에

다음과 같이 heap.py라는 파일을 import[가져오기]한 것입니다.

시간되시면 직접 뜯어보시는 걸 추천합니다!ㅎㅎ

감사합니다!

 

출처:

https://wikidocs.net/105044

 

012 수상자 3명을 선정하려면? ― heapq

heapq는 순위가 가장 높은 자료(data)를 가장 먼저 꺼내는 우선순위 큐를 구현한 모듈이다. 리스트 등을 사용하여 우선순위 큐를 직접 구현하기가 어렵진 않지만, 이보다는 이…

wikidocs.net

 

댓글