Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะค้นหารายการที่ใหญ่ที่สุดหรือเล็กที่สุดใน Python ได้อย่างไร


บทความนี้มุ่งเป้าไปที่นักพัฒนาที่ต้องการค้นหารายการที่ใหญ่ที่สุดหรือเล็กที่สุดด้วย Python ฉันจะแสดงวิธีการใช้งานสองสามวิธี และจะสรุปวิธีที่ดีที่สุดสำหรับคุณ

วิธีการ – 1:วิธี Slice ในรายการ

หากคุณเพียงแค่พยายามค้นหารายการที่เล็กที่สุดหรือใหญ่ที่สุดเพียงรายการเดียว นั่นคือ 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 มีสองฟังก์ชัน—nlargest() และ nsmallest() ที่สามารถใช้เพื่อค้นหารายการที่ nsmallest หรือ nbigest

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}]

การหา N ที่ใหญ่ที่สุดและเล็กที่สุดจาก DataFrame

โลกนี้ประกอบขึ้นด้วยไฟล์ CSV ใช่แล้ว!

ดังนั้นจึงปลอดภัยมากที่จะสรุปว่าเมื่อถึงจุดหนึ่งในการพัฒนา python คุณจะพบกับ CSV และ DataFrame ที่เห็นได้ชัด

ฉันจะแสดงวิธีการสองสามวิธีในการค้นหา N ที่ใหญ่ที่สุด/เล็กที่สุดจาก DataFrame

ในวิธีแรก เราจะจัดเรียงค่าโดยใช้วิธี 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() สามารถปรับเปลี่ยนวิธีการทำงานของ python และจะดำเนินการปรับให้เหมาะสมบางอย่างในนามของคุณ