जवाबों:
मूल उत्तर:
mylist = ["b", "C", "A"]
mylist.sort()
यह आपकी मूल सूची को संशोधित करता है (जैसे कि जगह में)। सूची की एक हल की प्रतिलिपि प्राप्त करने के लिए, मूल को बदले बिना, sorted()
फ़ंक्शन का उपयोग करें :
for x in sorted(mylist):
print x
हालाँकि, ऊपर दिए गए उदाहरण थोड़े भोले हैं, क्योंकि वे लोकेल को ध्यान में नहीं रखते हैं, और केस-सेंसिटिव सॉर्टिंग करते हैं। आप key
कस्टम सॉर्टिंग ऑर्डर को निर्दिष्ट करने के लिए वैकल्पिक पैरामीटर का लाभ उठा सकते हैं (विकल्प, उपयोग करना cmp
, एक पदावनत समाधान है, क्योंकि इसका कई बार मूल्यांकन किया जाना है - key
केवल एक बार तत्व के अनुसार गणना की जाती है)।
इसलिए, वर्तमान लोकेल के अनुसार, भाषा-विशिष्ट नियमों को ध्यान में रखते हुए ( cmp_to_key
फंक्शंस से सहायक समारोह है):
sorted(mylist, key=cmp_to_key(locale.strcoll))
और अंत में, यदि आपको आवश्यकता है, तो आप छाँटने के लिए एक कस्टम लोकेल निर्दिष्ट कर सकते हैं :
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']
अंतिम नोट: आप केस-असंवेदनशील छँटाई के उदाहरण देखेंगे जो lower()
विधि का उपयोग करते हैं - वे गलत हैं, क्योंकि वे केवल ASCII वर्णों के सबसेट के लिए काम करते हैं। वे दोनों किसी भी गैर-अंग्रेजी डेटा के लिए गलत हैं:
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)
mylist.sort(key=str.lower)
ज्यादा तेज़ है।
[1, 2, 3].sort()
। जैसा sort()
कि सूची में जगह है (यानी, सूची को सीधे बदल देता है), यह क्रमबद्ध सूची को वापस नहीं करता है, और वास्तव में कुछ भी वापस नहीं करता है, इसलिए आपका प्रिंट स्टेटमेंट प्रिंट करता है None
। यदि आपने अपनी सूची को एक चर में सहेजा है , तो , x
कहा जाता है x.sort()
, तब print(x)
, आपको सॉर्ट की गई सूची दिखाई देगी।
यह भी ध्यान देने योग्य है कि sorted()
फ़ंक्शन:
for x in sorted(list):
print x
यह मूल सूची को बदले बिना किसी सूची का नया, सॉर्ट किया गया संस्करण लौटाता है।
तार छांटने का उचित तरीका है:
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']
# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']
पिछले उदाहरण mylist.sort(key=lambda x: x.lower())
ASCII- केवल संदर्भों के लिए ठीक काम करेंगे।
कृपया पायथन 3 में क्रमबद्ध () फ़ंक्शन का उपयोग करें
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
लेकिन यह भाषा विशिष्ट सॉर्टिंग नियमों को कैसे संभालती है? क्या यह लोकेल को ध्यान में रखता है?
नहीं, list.sort()
एक सामान्य सॉर्टिंग फ़ंक्शन है। यदि आप यूनिकोड नियमों के अनुसार क्रमबद्ध करना चाहते हैं, तो आपको एक कस्टम प्रकार कुंजी फ़ंक्शन को परिभाषित करना होगा। आप पाइका मॉड्यूल का उपयोग करने की कोशिश कर सकते हैं , लेकिन मुझे नहीं पता कि यह कितना पूरा है।
पुराना सवाल है, लेकिन अगर आप बिना किसी सेटिंग के लोकल- अवेयर सॉर्टिंग करना चाहते हैं तो आप इस उत्तर के अनुसार पाइकयू लाइब्रेरीlocale.LC_ALL
का उपयोग करके ऐसा कर सकते हैं :
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
फिर उदाहरण के लिए कॉल करें:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
यह मेरे लिए किसी भी स्थान को स्थापित करने या अन्य सिस्टम सेटिंग्स को बदलने के बिना काम किया।
(यह पहले ही ऊपर एक टिप्पणी में सुझाया गया था , लेकिन मैं इसे और अधिक प्रमुखता देना चाहता था, क्योंकि मैं इसे पहले खुद से चूक गया था)
या हो सकता है:
names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
यह सरल है: https://trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
अंक = छांटे गए x के लिए स्कोर (',') (स्कोर): प्रिंट (x)
locale
वर्तमान लोकेल के अनुसार स्वाभाविक रूप से सॉर्ट करने के लिए स्ट्रिंग कोलिंग मेथड्स का उपयोग करें और इसे करें ।