यह लेख उन डेवलपर्स के लिए है जो Python में सबसे बड़े या सबसे छोटे आइटम ढूंढना चाहते हैं। मैं उपयोग करने के लिए कुछ मेथड दिखाऊंगा और आपके लिए सर्वोत्तम मेथड पर निष्कर्ष निकालूंगा।
मेथड - 1: लिस्ट पर स्लाइस दृष्टिकोण
यदि आप केवल एकल सबसे छोटे या सबसे बड़े आइटम को खोजने का प्रयास कर रहे हैं यानी N = 1, तो min() और max() का उपयोग करना तेज़ है।
आइए कुछ रैंडम इंटीजर उत्पन्न करके शुरू करें।
import random
# इंटीजर की एक रैंडम लिस्ट बनाएं
random_list = random.sample(range(1, 10), 9)
random_list
[2, 4, 5, 1, 7, 9, 6, 8, 3]
सबसे छोटा और सबसे बड़ा आइटम ढूंढना (N=1)
# सबसे छोटी संख्या ढूंढें (N=1)
min(random_list)
1
# सबसे बड़ी संख्या ढूंढें (N=1)
max(random_list)
9
3 सबसे छोटे और सबसे बड़े आइटम ढूंढना (N=3)
इसी तरह, यदि N संग्रह के आकार के बराबर है, तो आमतौर पर पहले सॉर्ट करना और फिर N का स्लाइस लेना तेज़ होता है।
# स्लाइस दृष्टिकोण का उपयोग करके nsmallest प्राप्त करें (N=3)
sorted(random_list)[:3]
[1, 2, 3]
# स्लाइस दृष्टिकोण का उपयोग करके nlargest प्राप्त करें (N=3)
sorted(random_list)[-3:]
[7, 8, 9]
मेथड - 2: लिस्ट पर heapq मेथड
heapq मॉड्यूल में दो फ़ंक्शन nlargest() और nsmallest() होते हैं जिनका उपयोग n सबसे छोटे या n सबसे बड़े आइटम खोजने के लिए किया जा सकता है।
import heapq
import random
random_list = random.sample(range(1, 10), 9)
# nsmallest आइटम (N=3)
heapq.nsmallest(3, random_list)
[1, 2, 3]
# nlargest आइटम (N=3)
heapq.nlargest(3, random_list)
[9, 8, 7]
यदि आपके पास थोड़ा अधिक जटिल डेटा है, तो heapq फ़ंक्शन में एक key पैरामीटर होता है जिसका उपयोग किया जा सकता है।
import heapq
grandslams = [
{'name': 'Roger Federer', 'titles': 20},
{'name': 'Rafel Nadal', 'titles': 19},
{'name': 'Novak Djokovic', 'titles': 17},
{'name': 'Andy Murray', 'titles': 3},
]
# कम खिताब वाले खिलाड़ी (N=3)
less = heapq.nsmallest(3, grandslams, key=lambda s: s['titles'])
less
[{'name': 'Andy Murray', 'titles': 3},
{'name': 'Novak Djokovic', 'titles': 17},
{'name': 'Rafel Nadal', 'titles': 19}]
# सबसे अधिक खिताब वाले खिलाड़ी (N=3)
more = heapq.nlargest(3, grandslams, key=lambda s: s['titles'])
more
[{'name': 'Roger Federer', 'titles': 20},
{'name': 'Rafel Nadal', 'titles': 19},
{'name': 'Novak Djokovic', 'titles': 17}]
DataFrame से N सबसे बड़े और सबसे छोटे मान ढूंढना
दुनिया CSV फ़ाइलों से बनी है, हाँ वे हैं! इसलिए यह मान लेना बहुत सुरक्षित है कि आपके Python विकास में किसी बिंदु पर आप CSV और जाहिर तौर पर DataFrame का सामना करेंगे।
मैं आपको DataFrame से N सबसे बड़े/सबसे छोटे मान खोजने के कुछ मेथड दिखाऊंगा।
पहले मेथड में हम sort_values() मेथड का उपयोग करके मानों को सॉर्ट करेंगे और head मेथड का उपयोग करके मान लेंगे।
import pandas as pd
import io
# अपना डेटा परिभाषित करें
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)
titles
player
Murray 3
Djokovic 17
Nadal 19
# nlargest (N = 3)
df.sort_values("titles", ascending=False).head(3)
titles
player
Federer 20
Nadal 19
Djokovic 17
पंक्तियों को सॉर्ट करने और .head() मेथड का उपयोग करने के बजाय, हम .nsmallest() और .nlargest() मेथड को कॉल कर सकते हैं।
df.nsmallest(3, columns="titles")
titles
player
Murray 3
Djokovic 17
Nadal 19
df.nlargest(3, columns="titles")
titles
player
Federer 20
Nadal 19
Djokovic 17
निष्कर्ष
- यदि आप अपेक्षाकृत कम संख्या में आइटम ढूंढने का प्रयास कर रहे हैं, तो
nlargest()औरnsmallest()फ़ंक्शन सबसे उपयुक्त हैं। - यदि आप केवल एकल सबसे छोटे या सबसे बड़े आइटम को खोजने का प्रयास कर रहे हैं (N=1), तो
min()औरmax()का उपयोग करना तेज़ है। - इसी तरह, यदि N संग्रह के आकार के बराबर है, तो आमतौर पर पहले सॉर्ट करना और फिर एक स्लाइस लेना तेज़ होता है।
- निष्कर्ष में,
nlargest()औरnsmallest()का वास्तविक कार्यान्वयन इस बात में अनुकूली है कि Python कैसे काम करता है और ये आपकी ओर से इनमें से कुछ अनुकूलन को पूरा करेगा।