2013-11-25 7 views
15

कॉलम द्वारा सूची क्रमबद्ध करने के लिए सॉर्ट() विधि या किसी अन्य विधि का उपयोग करने का कोई तरीका है?स्तंभ द्वारा बहुआयामी सरणी को कैसे क्रमबद्ध करें?

[ 
[John,2], 
[Jim,9], 
[Jason,1] 
] 

और मैंने इसे सुलझाने के लिए इतना है कि यह इस तरह दिखना चाहते थे:

[ 
[Jason,1], 
[John,2], 
[Jim,9], 
] 

क्या सबसे अच्छा तरीका यह करने के लिए किया जाएगा मैं सूची है कहते हैं कि चलो?

संपादित करें:

अभी मैं सीमा त्रुटि से बाहर एक सूचकांक में चल रहा हूँ। मेरे पास 2 आयामी सरणी है जो 1000 पंक्तियों बी 3 कॉलम कहती है। मैं इसे तीसरे कॉलम के आधार पर सॉर्ट करना चाहता हूं। क्या यह इसके लिए सही कोड है?

sorted_list = sorted(list_not_sorted, key=lambda x:x[2]) 
+0

देखें: http: // stackoverflow।कॉम/प्रश्न/2828059/सॉर्टिंग-एरे-इन-न्यूपी-बाय-कॉलम – duhaime

+0

अभी मैं रेंज त्रुटि से बाहर एक इंडेक्स में चल रहा हूं। मेरे पास 2 आयामी सरणी है जो 1000 पंक्तियों बी 3 कॉलम कहती है। मैं इसे तीसरे कॉलम के आधार पर सॉर्ट करना चाहता हूं। क्या यह इसके लिए सही कोड है? sorted_list = sorted (list_not_sorted, key = lambda x: x [2]) –

+0

आपके संपादन के जवाब में, चूंकि सूचियां शून्य अनुक्रमित हैं, हां x [2] तीसरा कॉलम है। कहानी का नैतिक है, आप 'क्रमबद्ध' और 'सॉर्ट' फ़ंक्शंस में कुछ शर्त द्वारा सॉर्ट करने के लिए एक कुंजी और लैम्ब्डा या वास्तविक फ़ंक्शन का उपयोग कर सकते हैं। – squiguy

उत्तर

22

हां।

sorted(li,key=lambda x: x[1]) 
Out[31]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

ध्यान दें कि sorted एक नई सूची देता है: sorted में निर्मित एक key तर्क स्वीकार करता है। यदि आप इन-प्लेस को सॉर्ट करना चाहते हैं, तो अपनी सूची के .sort विधि का उपयोग करें (जो भी आसानी से key तर्क स्वीकार करता है)।

या वैकल्पिक रूप से,

from operator import itemgetter 
sorted(li,key=itemgetter(1)) 
Out[33]: [['Jason', 1], ['John', 2], ['Jim', 9]] 

Read more on the python wiki

+0

शायद यह उल्लेख करना चाहें कि यह एक नई सूची लौटाएगा। वास्तव में – iCodez

+1

। यदि आप मूल सूची को संशोधित करना चाहते हैं, तो यह 'li.sort (key = whatever)' होगा। – user2357112

6

आप एक कुंजी के साथ क्रमबद्ध विधि का उपयोग कर सकते हैं।

sorted(a, key=lambda x : x[1]) 
0

आप अपने वैकल्पिक key parameter साथ list.sort उपयोग कर सकते हैं और एक lambda expression:

>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=lambda x:x[1]) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 

यह यथा-स्थान सूची को सॉर्ट होगा।


ध्यान दें कि बड़ी सूचियों के लिए, यह operator.itemgetter बजाय एक lambda का उपयोग करने के लिए तेजी से हो जाएगा:

>>> from operator import itemgetter 
>>> lst = [ 
...  ['John',2], 
...  ['Jim',9], 
...  ['Jason',1] 
... ] 
>>> lst.sort(key=itemgetter(1)) 
>>> lst 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
>>> 
+0

"लैम्ब्डा" कुंजी वास्तव में क्या है? –

+0

@ user3024130 - 'lambda'' key' पैरामीटर के लिए एक इनलाइन फ़ंक्शन बनाता है। मैंने बेहतर व्याख्या करने के लिए एक लिंक जोड़ा। 'लैम्ब्डा' का उपयोग करना 'def func (x) करने से अलग नहीं होगा: x [1] 'और फिर' lst.sort (key = func)' लौटाएं। – iCodez

+0

ठीक है कि समझ में आता है। आप निम्नतम से उच्चतम के बजाय इसे उच्चतम से निम्नतम तक कैसे क्रमबद्ध करेंगे? –

0

sort/sorted के लिए वैकल्पिक key पैरामीटर एक समारोह है। समारोह प्रत्येक आइटम के लिए कहा जाता है और वापसी मान प्रकार

>>> lst = [['John', 2], ['Jim', 9], ['Jason', 1]] 
>>> def my_key_func(item): 
...  print("The key for {} is {}".format(item, item[1])) 
...  return item[1] 
... 
>>> sorted(lst, key=my_key_func) 
The key for ['John', 2] is 2 
The key for ['Jim', 9] is 9 
The key for ['Jason', 1] is 1 
[['Jason', 1], ['John', 2], ['Jim', 9]] 

print समारोह से बाहर ले जा रहा का क्रम निर्धारित

>>> def my_key_func(item): 
...  return item[1] 

इस समारोह काफी सरल "इनलाइन" लिखने के लिए के रूप में है छोड़ देता है एक लैम्ब्डा समारोह

>>> sorted(lst, key=lambda item: item[1]) 
[['Jason', 1], ['John', 2], ['Jim', 9]] 
0
sorted(list, key=lambda x: x[1]) 

नोट: इस समय चर पर काम करता है भी।

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