সংখ্যার লিস্টকে একক স্থানের ডিজিট (units digit) অনুযায়ী সাজানোর জন্য কাস্টম কি ফাংশন, স্ট্রিং রূপান্তর এবং নেগেটিভ ইন্ডেক্সিং ব্যবহার করা হয়।
উদাহরণ
def unit_digit_key(n):
"""সংখ্যার একক স্থানের ডিজিট ফেরত দেয় (স্ট্রিং হিসেবে)"""
return str(n)[-1]
my_list = [716, 134, 343, 24742]
print("মূল লিস্ট:", my_list)
# ইউনিট ডিজিট দেখানো
for n in my_list:
print(f" {n} → ইউনিট ডিজিট: {unit_digit_key(n)}")
# সর্ট
my_list.sort(key=unit_digit_key)
print("\nইউনিট ডিজিট অনুযায়ী সাজানো লিস্ট:")
print(my_list)
আউটপুট
মূল লিস্ট: [716, 134, 343, 24742]
716 → ইউনিট ডিজিট: 6
134 → ইউনিট ডিজিট: 4
343 → ইউনিট ডিজিট: 3
24742 → ইউনিট ডিজিট: 2
ইউনিট ডিজিট অনুযায়ী সাজানো লিস্ট: [24742, 343, 134, 716]
ব্যাখ্যা
str(n)[-1]— সংখ্যাকে স্ট্রিং বানিয়ে শেষ ক্যারেক্টার নেয়- স্ট্রিং কম্পারিজন: '2' < '3' < '4' < '6' (লেক্সিকোগ্রাফিক্যালি)
- ফলাফল: ২ → ৩ → ৪ → ৬ অনুযায়ী সাজায়
ইন্টিজার মডুলো দিয়ে (দ্রুত, স্ট্রিং কনভারশন ছাড়া)
my_list.sort(key=lambda x: x % 10)
# একই ফলাফল: [24742, 343, 134, 716]
x % 10 সরাসরি একক স্থানের ডিজিট দেয় (নেগেটিভ সংখ্যার জন্য Python-এ `-123 % 10 = 7`, চাইলে `abs(x) % 10` ব্যবহার করুন)।
ডিসেন্ডিং ক্রম
my_list.sort(key=lambda x: x % 10, reverse=True)
# [716, 134, 343, 24742]
স্ট্রিং লিস্টের জন্য
str_list = ["123", "45", "6789", "0"]
str_list.sort(key=lambda s: s[-1])
# ['0', '45', '123', '6789'] → 0, 5, 3, 9