উত্তর:
প্রাথমিক উত্তর:
mylist = ["b", "C", "A"]
mylist.sort()
এটি আপনার আসল তালিকাকে (যেমন স্থানের ধরণে সাজিয়ে তোলে) পরিবর্তন করে। আসলটি পরিবর্তন না করে তালিকার সাজানো অনুলিপি পেতে sorted()
ফাংশনটি ব্যবহার করুন :
for x in sorted(mylist):
print x
তবে উপরের উদাহরণগুলি কিছুটা নির্বোধ, কারণ তারা লোকালকে বিবেচনায় নেয় না এবং কেস-সংবেদনশীল বাছাই করে। আপনি key
পছন্দসই বাছাইয়ের আদেশ নির্দিষ্ট করতে al চ্ছিক প্যারামিটারের সুবিধা নিতে পারেন (বিকল্পটি ব্যবহার করে 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 এর জন্য স্কোর = স্কোর.স্প্লিট (','): মুদ্রণ (এক্স)
locale
বর্তমান লোকেল অনুসারে প্রাকৃতিকভাবে সাজানোর জন্য এটির স্ট্রিং কোলেশন পদ্ধতিগুলি ব্যবহার করুন এবং করুন ।