2013-07-09 10 views
55

मैं प्रत्येक व्यक्तिगत सूची में चौथे तत्व (पूर्णांक) द्वारा सूचियों की निम्न सूची को सॉर्ट करना चाहता हूं।पायथन - प्रत्येक सूची में चौथे तत्व द्वारा सूचियों की सूची को कैसे क्रमबद्ध करें?

unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']] 

मैं यह कैसे कर सकता हूं? धन्यवाद!

+0

क्या आप चाहते हैं दूसरे तत्व, या चौथे द्वारा क्रमबद्ध करने के लिए? – Taymon

उत्तर

95
unsorted_list.sort(key=lambda x: x[3]) 
+42

यह ध्यान देने योग्य है कि इस विधि में, पूर्णांक की तुलना में पूर्णांक की तुलना की जाती है। इस प्रकार, '5 '' '20' से बड़ा होगा। यदि एक पूर्णांक तुलना की जानी है, तो 'key = lambda x: int (x [3]) ' – inspectorG4dget

+10

का उपयोग किया जाना चाहिए आप यहां' key = itemgetter (3) 'का उपयोग भी कर सकते हैं ([' ऑपरेटर'] से (http : //docs.python.org/3.3/library/operator.html#operator.itemgetter) मॉड्यूल)। जबकि कुछ लोगों को 'itemgetter' और' attrgetter 'lambdas की तुलना में कम पठनीय लगता है, अन्य लोग उन्हें बड़े पैमाने पर उपयोग करते हैं, इसलिए कम से कम उन्हें पढ़ने में सक्षम होने के लायक हैं और जानते हैं कि वे क्या करते हैं। – abarnert

+0

यही कारण है कि मुझे पाइथन <3 –

27

उपयोग sorted() इस प्रकार एक key के रूप में साथ -

>>> unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']] 
>>> sorted(unsorted_list, key = lambda x: int(x[3])) 
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']] 

lambda रिटर्न भीतरी सूचियों में से प्रत्येक के चौथे तत्व और sorted समारोह का उपयोग करता है उन सूची सॉर्ट करने के लिए। यह मानता है कि int(elem) सूची के लिए असफल नहीं होगा।

या itemgetter का उपयोग करें (के रूप में अश्विनी की इस टिप्पणी ने बताया, इस विधि के बाद से वे 2 + अंकों की संख्या के लिए कहीं न कहीं विफल बाध्य कर रहे हैं, अगर आप संख्या की स्ट्रिंग निरूपण है काम नहीं होगा)

>>> from operator import itemgetter 
>>> sorted(unsorted_list, key = itemgetter(3)) 
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']] 
+1

'itemgetter' काम नहीं करेगा यदि सूची में शामिल है:' [['' ',' b ',' c ',' 100 ',' d '], [' e ',' f ',' g ',' 2 ',' एच '], [' मैं ',' जे ',' के ',' 4 ',' एम ']] ' –

+0

सच है। शायद मुझे इसे हटा देना चाहिए, 'लैम्ब्डा' यहां चाल है। –

+0

हां, 'itemgetter (3) 'केवल' lambda x: x [3]' को प्रतिस्थापित करता है, न कि 'lambda x: int (x [3]) '। (आप लिख सकते हैं (int, itemgetter (3)) ', लेकिन केवल अगर आप पागल हैं, या वास्तव में पाइथन में हास्केल या लिस्प कोड लिखने के लिए निर्धारित हैं ...) – abarnert

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