Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để tìm các mục lớn nhất hoặc nhỏ nhất trong Python?

Bài viết này hướng đến các nhà phát triển muốn tìm các mục lớn nhất hoặc nhỏ nhất bằng Python. Tôi sẽ chỉ ra một số phương pháp để sử dụng và sẽ kết luận phương pháp tốt nhất cho bạn.

Phương pháp - 1:Phương pháp tiếp cận cắt nhỏ trên một danh sách

Nếu bạn chỉ đang cố gắng tìm một mục nhỏ nhất hoặc lớn nhất, tức là N =1, thì việc sử dụng min () và max () sẽ nhanh hơn.

Chúng ta hãy bắt đầu bằng cách tạo một số số nguyên ngẫu nhiên.

import random
# Create a random list of integers
random_list = random.sample(range(1,10),9)
random_list

Đầu ra

[2, 4, 5, 1, 7, 9, 6, 8, 3]

TÌM MỤC NHỎ NHẤT &LỚN NHẤT (N =1)

# Find the smallest number (N=1)
min
(
random_list
)

Đầu ra

1
# Find the largest number (N=1)
max
(
random_list
)

Đầu ra

9

TÌM 3 MỤC NHỎ NHẤT &LỚN NHẤT (N =3)

Tương tự, nếu N có cùng kích thước với chính bộ sưu tập, thì việc sắp xếp nó trước và lấy một phần N.

sẽ nhanh hơn.
# lets get the nsmallest using a slice approach(N=3)
sorted(random_list)[:3]

Đầu ra

[1, 2, 3]
# lets get the nlargest using a slice approach(N=3)
sorted(random_list)[-3:]

Đầu ra

[7, 8, 9]

Phương pháp - 2:Phương thức heapq trên danh sách

Mô-đun heapq có hai hàm — nlargest () và nsmallest () có thể được sử dụng để tìm các mục nhỏ nhất hoặc lớn nhất.

import heapq
import random
random_list = random.sample(range(1,10),9)

# nsmallest items (N=3)
heapq.nsmallest(3,random_list)

Đầu ra

[1, 2, 3]
# nlargest items (N=3)
heapq.nlargest(3,random_list)

Đầu ra

[9, 8, 7]

Nếu bạn có dữ liệu phức tạp hơn một chút, các hàm heapq có một tham số chính có thể được sử dụng.

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

Đầu ra

[{'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

Đầu ra

[{'name': 'Roger Federer', 'titles': 20}, {'name': 'Rafel Nadal', 'titles': 19}, {'name': 'Novak Djokovic', 'titles': 17}]

Tìm N Lớn nhất và Nhỏ nhất từ ​​DataFrame.

Thế giới được tạo thành từ các tệp CSV, Đúng vậy !.

Vì vậy, rất an toàn nếu giả sử rằng tại một thời điểm nào đó trong quá trình phát triển python, bạn sẽ gặp phải CSV’s và dường nhưDataFrame.

Tôi sẽ chỉ cho bạn một số phương pháp để tìm N lớn nhất / nhỏ nhất từ ​​DataFrame.

Trong phương pháp đầu tiên, chúng ta sẽ sắp xếp các giá trị bằng phương thức sort_values ​​() và chọn các giá trị bằng phương thức 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)

Đầu ra

player title
_______________
Murray    3
Djokovic 17
Nadal    19


# nlargest (N = 3)
df.sort_values("titles",ascending = False).head(3)

Đầu ra

player title
_______________
Federer  20
Nadal    19
Djokovic 17

Thay vì sắp xếp các hàng và sử dụng phương thức .head (), chúng ta có thể gọi phương thức .nsmallest () và .nlargest ().

df.nsmallest(3,columns="titles")

Đầu ra

player title
_______________
Murray    3
Djokovic 17
Nadal    19


df.nlargest(3,columns = "titles")

Đầu ra

player title
_______________
Federer  20
Nadal    19
Djokovic 17

Kết luận

Nếu bạn đang cố gắng tìm một số lượng mục tương đối nhỏ, thì các hàm nlargest () và nsmallest () là thích hợp nhất.

Nếu bạn chỉ đang cố gắng tìm một mục nhỏ nhất hoặc lớn nhất (N =1), thì việc sử dụng min () và max () sẽ nhanh hơn.

Tương tự, nếu N có cùng kích thước với chính bộ sưu tập, thì việc sắp xếp nó trước và lấy một phần sẽ nhanh hơn.

Tóm lại, việc triển khai thực tế của nlargest () và nsmallest () là thích ứng trong cách python hoạt động và sẽ thay mặt bạn thực hiện một số tối ưu hóa này.