নেস্টেড লিস্ট (ম্যাট্রিক্স) কে প্রতিটি সারিতে None কতবার আছে তা অনুযায়ী সাজানোর জন্য কাস্টম কি ফাংশন, লিস্ট কম্প্রিহেনশন এবং len() ব্যবহার করা হয়।
উদাহরণ
def count_none(row):
"""সারিতে None কতবার আছে তা গিয়ে ফেরত দেয়"""
return len([x for x in row if x is None])
my_list = [[None, 24], [None, 33, 3, None], [42, 24, 55], [13, None, 24]]
print("মূল ম্যাট্রিক্স:")
for row in my_list:
print(" ", row, "→ None কাউন্ট:", count_none(row))
# None কাউন্ট অনুযায়ী সর্ট (আরোহী: কম None প্রথমে)
my_list.sort(key=count_none)
print("\nসাজানো ম্যাট্রিক্স:")
for row in my_list:
print(" ", row)
আউটপুট
মূল ম্যাট্রিক্স:
[None, 24] → None কাউন্ট: 1
[None, 33, 3, None] → None কাউন্ট: 2
[42, 24, 55] → None কাউন্ট: 0
[13, None, 24] → None কাউন্ট: 1
সাজানো ম্যাট্রিক্স:
[42, 24, 55]
[None, 24]
[13, None, 24]
[None, 33, 3, None]
ব্যাখ্যা
[x for x in row if x is None]— সারিতে থাকা সবNoneবের করে লিস্ট বানায়len(...)— তার দৈর্ঘ্য = None কাউন্টsort(key=count_none)— এই কাউন্ট অনুযায়ী সর্ট
ল্যাম্বডা দিয়ে সংক্ষিপ্ত
my_list.sort(key=lambda row: sum(1 for x in row if x is None))
# অথবা
my_list.sort(key=lambda row: row.count(None)) # লিস্টে count() মেথড আছে
row.count(None) সবচেয়ে সহজ এবং দ্রুত।
অবরোহী ক্রম (বেশি None প্রথমে)
my_list.sort(key=lambda row: row.count(None), reverse=True)