এই আর্টিকেলটি ডেভেলপারদের জন্য যারা পাইথনে সর্বোচ্চ বা সর্বনিম্ন মান বের করতে চান। এখানে кільটি মেথড আলোচনা করা হয়েছে এবং সেরা পদ্ধতি নির্ণয় করা হয়েছে।
মেথড ১: লিস্টে স্লাইসিং অ্যাপ্রোচ
যদি শুধু একটিই সবচেয়ে ছোট বা বড় আইটেম দরকার হয় (N=1), তবে min() এবং max() ফাংশনই দ্রুততম।
import random random_list = random.sample(range(1, 10), 9) # আউটপুট: [2, 4, 5, 1, 7, 9, 6, 8, 3]
N=1 এর জন্য
min(random_list) # 1 max(random_list) # 9
N=3 এর জন্য (৩টি ছোট ও বড় আইটেম)
যদি N কালেকশনের আকারের কাছাকাছি হয়, তবে সর্ট করে স্লাইস নেওয়া দ্রুত।
sorted(random_list)[:3] # [1, 2, 3] (৩টি ছোট) sorted(random_list)[-3:] # [7, 8, 9] (৩টি বড়)
মেথড ২: heapq মডিউল ব্যবহার
heapq মডিউলের nlargest() এবং nsmallest() ফাংশন খুবই দক্ষ।
import heapq heapq.nsmallest(3, random_list) # [1, 2, 3] heapq.nlargest(3, random_list) # [9, 8, 7]
জটিল ডেটা (যেমন ডিকশনারির লিস্ট) এর জন্য key প্যারামিটার ব্যবহার করা যায়।
grandslams = [
{'name': 'Roger Federer', 'titles': 20},
{'name': 'Rafael Nadal', 'titles': 19},
{'name': 'Novak Djokovic', 'titles': 17},
{'name': 'Andy Murray', 'titles': 3},
]
# কম টাইটেল 가진 ৩ খেলোয়াড়
heapq.nsmallest(3, grandslams, key=lambda s: s['titles'])
# [{'name': 'Andy Murray', 'titles': 3}, ...]
# সবচেয়ে বেশি টাইটেল 가진 ৩ খেলোয়াড়
heapq.nlargest(3, grandslams, key=lambda s: s['titles'])
# [{'name': 'Roger Federer', 'titles': 20}, ...]
ডেটাফ্রেম থেকে N সবচেয়ে বড়/ছোট মান বের করা
CSV ফাইল থেকে ডেটাফ্রেম তৈরি করে দুটি পদ্ধতিতে করা যায়:
পদ্ধoti ১: sort_values() + head()
import pandas as pd
import io
data = """player,titles
Djokovic,17
Nadal,19
Federer,20
Murray,3"""
df = pd.read_csv(io.StringIO(data), index_col="player")
df.sort_values("titles").head(3) # nsmallest
df.sort_values("titles", ascending=False).head(3) # nlargest
পদ্ধতি ২: সরাসরি nsmallest()/nlargest() মেথড (বेहতর ও পঠনীয়)
df.nsmallest(3, columns="titles") df.nlargest(3, columns="titles")
উপসংহার
- N=1 হলে
min()/max()দ্রুততম। - N ছোট হলে
nlargest()/nsmallest()সেরা। - N কালেকশনের আকারের কাছাকাছি হলে সর্ট করে স্লাইস নেওয়া ভালো।
nlargest()/nsmallest()আডাপ্টিভ অপ্টিমাইজেশন করে।