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

Python에서 가장 큰 항목 또는 가장 작은 항목을 찾는 방법은 무엇입니까?

<시간/>

이 기사는 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()의 실제 구현은 파이썬이 작동하는 방식에 적응하며 사용자를 대신하여 이러한 최적화 중 일부를 수행합니다.