2010-11-18 10 views
32

क्या कोई ऐसा कार्य है जो मुझे कुछ सूची से एन उच्चतम तत्व लौटाएगा?पायथन: कुछ सूची से अधिकतम एन तत्व लें

आईई। यदि max(l) एकल उच्चतम तत्व देता है, sth। जैसे max(l, count=10) मुझे 10 उच्चतम संख्याओं की सूची लौटाएगा (या कम l छोटा है)।

या इन्हें प्राप्त करने का एक आसान तरीका क्या होगा? (स्पष्ट कैननिकल कार्यान्वयन को छोड़कर; ऐसी कोई चीजें जो पूरी सूची को पहले क्रमबद्ध करने में शामिल नहीं हैं क्योंकि यह कैनोलिक समाधान की तुलना में अक्षम होगी।)

+1

http://stackoverflow.com/q/1034846/64633 – Rod

+6

heapq.nlargest के संभावित डुप्लिकेट है करता है कि जिस तरह से है वास्तव में बड़ी सूचियों के लिए जाने के लिए, लेकिन मेरे सिस्टम पर, क्रमबद्ध (एल) [: गिनती] तेज है जब तक सूची ~ 25000 तत्व तक पहुंच जाती है। –

+0

सॉर्ट किया गया (एल, रिवर्स = ट्रू) [0: एन] –

उत्तर

49

heapq.nlargest:

>>> import heapq, random 
>>> heapq.nlargest(3, (random.gauss(0, 1) for _ in xrange(100))) 
[1.9730767232998481, 1.9326532289091407, 1.7762926716966254] 
1

एक काफी कुशल समाधान क्विकॉर्ट्स की एक भिन्नता है जहां रिकर्सन सीमित है पिवट का सही हिस्सा जब तक पिवट पॉइंट स्थिति आवश्यक तत्वों की संख्या से अधिक न हो (पाठ्यक्रम के सीमा मामलों से निपटने के लिए कुछ अतिरिक्त स्थितियों के साथ)।

मानक पुस्तकालय में heapq.nlargest है, जैसा कि यहां दूसरों ने बताया है।

3

पहले 10 एल से साथ प्रारंभ,

लूप एल से अधिक [i] एक्स के न्यूनतम मूल्य फोन है कि एक्स नोट एल

के बाकी हिस्सों में मैं के लिए

तो एल [i] न्यूनतम (एक्स) से अधिक है, एक्स से ड्रॉप मिनट (एक्स) और एल [i] डालें। आपको एक्स को एक क्रमबद्ध लिंक्ड सूची के रूप में रखने और एक सम्मिलन करने की आवश्यकता हो सकती है। न्यूनतम (एक्स) अपडेट करें।

अंत में, आप मुझे लगता है एक्स

की 10 सबसे बड़ी मूल्यों है कि हो जाएगा ओ (केएन) (जहां k 10 यहाँ है) के बाद से प्रविष्टि प्रकार रैखिक है। हो सकता है क्या GSL का उपयोग करता है, इसलिए यदि आप कुछ सी कोड पढ़ सकते हैं:

http://www.gnu.org/software/gsl/manual/html_node/Selecting-the-k-smallest-or-largest-elements.html

शायद numpy में कुछ ऐसा है जो ऐसा करता है।

+0

हाँ, यही मेरा स्पष्ट कैननिकल समाधान के साथ था। :) (मूल रूप से एक सामान्यीकृत 'न्यूनतम' एल्गोरिदम।) – Albert

संबंधित मुद्दे