2015-12-10 5 views
6

में सूची की सूची छँटाई मैं की तरह अजगर में एक सूची है -अजगर

[['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 

मुझे यह पसंद क्रमबद्ध करना चाहते हैं इस प्रकार है -

[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 

उत्तर

10

पहले प्रकार अलग-अलग सूचियां और फिर तरह आइटम लंबाई और उसके बाद वास्तविक तत्वों के आधार पर क्रमबद्ध सूचियां, जैसे

>>> data = [['C'], ['B'], ['A'], ['C', 'B'], ['B', 'A'], ['A', 'C']] 
>>> sorted((sorted(item) for item in data), key=lambda x: (len(x), x)) 
[['A'], ['B'], ['C'], ['A', 'B'], ['A', 'C'], ['B', 'C']] 

यह काम करता है क्योंकि तारों की सूची मैं डिफ़ॉल्ट रूप से, lexicographically क्रमबद्ध किया जा सकता है। आपके मामले में, जब आंतरिक सूचियों को क्रमबद्ध किया जाता है, बाहरी सूचियों को पहली बार सूची की लंबाई के आधार पर क्रमबद्ध किया जाता है और यदि वे समान होते हैं तो स्ट्रिंग के वास्तविक तत्वों का तुलना तुलना के लिए किया जाएगा।


इसे चरण-दर-चरण समझा जा सकता है। पहले व्यक्ति इस

>>> [sorted(item) for item in data] 
[['C'], ['B'], ['A'], ['B', 'C'], ['A', 'B'], ['A', 'C']] 

में परिणाम छँटाई तत्वों अब, हम आरोही क्रम में लंबाई पहले के आधार पर यह सॉर्ट करने के लिए की जरूरत है, और फिर तत्वों को भी हल कर दिया जाना चाहिए। इसलिए, हम बाहरी सॉर्टिंग फ़ंक्शन, lambda x: (len(x), x) पर एक कस्टम फ़ंक्शन पास करते हैं।

+0

शानदार! टोपी के तहत एक और चाल - कुंजी 'एक' स्मारक का एक फ़ंक्शन निर्दिष्ट करती है जिसका उपयोग प्रत्येक सूची तत्व से तुलना कुंजी निकालने के लिए किया जाता है। – SIslam