이 기사는 Python으로 가장 크거나 작은 항목을 찾고자 하는 개발자를 대상으로 합니다. 몇 가지 사용 방법을 보여주고 가장 적합한 방법을 결론지을 것입니다.
방법 – 1:목록에 대한 슬라이스 접근
N =1과 같이 가장 작거나 큰 단일 항목을 단순히 찾으려면 min() 및 max()를 사용하는 것이 더 빠릅니다.
임의의 정수를 생성하는 것으로 시작하겠습니다.
import random # Create a random list of integers random_list = random.sample(range(1,10),9) random_list
출력
[2, 4, 5, 1, 7, 9, 6, 8, 3]
가장 작은 항목 및 가장 큰 항목 찾기(N=1)
# Find the smallest number (N=1) min ( random_list )
출력
1
# Find the largest number (N=1) max ( random_list )
출력
9
가장 작은 것 및 가장 큰 것 3가지 찾기(N=3)
마찬가지로 N이 컬렉션 자체와 크기가 거의 같은 경우 일반적으로 먼저 정렬하고 N 조각을 가져오는 것이 더 빠릅니다.
# lets get the nsmallest using a slice approach(N=3) sorted(random_list)[:3]
출력
[1, 2, 3]
# lets get the nlargest using a slice approach(N=3) sorted(random_list)[-3:]
출력
[7, 8, 9]
메소드 – 2:목록의 heapq 메서드
heapq 모듈에는 nsmallest 또는 nlargest 항목을 찾는 데 사용할 수 있는 nlargest() 및 nsmallest()의 두 가지 함수가 있습니다.
import heapq import random random_list = random.sample(range(1,10),9) # nsmallest items (N=3) heapq.nsmallest(3,random_list)
출력
[1, 2, 3]
# nlargest items (N=3) heapq.nlargest(3,random_list)
출력
[9, 8, 7]
좀 더 복잡한 데이터가 있는 경우 heapq 함수에 사용할 수 있는 키 매개변수가 있습니다.
import heapq grandslams = [ {'name':'Roger Federer','titles':20}, {'name:'Rafel Nadal','titles':19}, {'name':'Novak Djokovic','titles':17}, {'name':'Andy Murray','titles':3},] # Players with less titles (N=3) less = heapq.nsmallest(3,grandslams, key = lambdas:s['titles']) less
출력
[{'name': 'Andy Murray', 'titles': 3}, {'name': 'Novak Djokovic', 'titles': 17}, {'name': 'Rafel Nadal', 'titles': 19}]
# Players with highest titles (N=3) more = heapq.nlargest(3,grandslams,key = lambdas:s['titles']) more
출력
[{'name': 'Roger Federer', 'titles': 20}, {'name': 'Rafel Nadal', 'titles': 19}, {'name': 'Novak Djokovic', 'titles': 17}]
DataFrame에서 N개의 가장 큰 값과 가장 작은 값 찾기
음, 세상은 CSV 파일로 구성되어 있습니다. 그렇습니다!.
따라서 파이썬 개발의 어느 시점에서 CSV와 분명히DataFrame을 만날 것이라고 가정하는 것은 매우 안전합니다.
DataFrame에서 N개의 가장 큰/작은 값을 찾는 몇 가지 방법을 보여 드리겠습니다.
첫 번째 방법에서는 sort_values() 메서드를 사용하여 값을 정렬하고 head 메서드를 사용하여 값을 선택합니다.
import pandas as pd import io # Define your data data = """ player,titles Djokovic,17 Nadal,19 Federer,20 Murray,3 """ throwaway_storage = io.StringIO(data) df = pd.read_csv(throwaway_storage,index_col = "player")
# nsmallest (N = 3) df.sort_values("titles").head(3)
출력
player title _______________ Murray 3 Djokovic 17 Nadal 19
# nlargest (N = 3) df.sort_values("titles",ascending = False).head(3)
출력
player title _______________ Federer 20 Nadal 19 Djokovic 17
행을 정렬하고 .head() 메서드를 사용하는 대신 .nsmallest() 및 .nlargest() 메서드를 호출할 수 있습니다.
df.nsmallest(3,columns="titles")
출력
player title _______________ Murray 3 Djokovic 17 Nadal 19
df.nlargest(3,columns = "titles")
출력
player title _______________ Federer 20 Nadal 19 Djokovic 17
결론
비교적 적은 수의 항목을 찾으려면 nlargest() 및 nsmallest() 함수가 가장 적합합니다.
가장 작은 항목 또는 가장 큰 항목(N=1)을 하나만 찾으려면 min() 및 max()를 사용하는 것이 더 빠릅니다.
마찬가지로 N이 컬렉션 자체와 크기가 거의 같은 경우 일반적으로 먼저 정렬하고 슬라이스를 가져오는 것이 더 빠릅니다.
결론적으로, nlargest() 및 nsmallest()의 실제 구현은 파이썬이 작동하는 방식에 적응하며 사용자를 대신하여 이러한 최적화 중 일부를 수행합니다.