কম্পিউটার টিউটোরিয়াল

পাইথন: স্ট্রিং লিস্ট থেকে সাজানো (Sorted) স্ট্রিং বের করা

স্ট্রিং লিস্ট থেকে যেসব স্ট্রিংয়ের ক্যারেক্টারগুলো ইতিমধ্যে সাজানো অবস্থায় আছে (অর্থাৎ স্ট্রিং == স্ট্রিংয়ের সাজানো ভার্সন), সেগুলো ফিল্টার করার জন্য sorted() এবং join() ব্যবহার করা হয়।

উদাহরণ


my_list = ["pyt", "Fdf", "Fun"]
print("লিস্ট:", my_list)

# ফিল্টার: স্ট্রিং == sorted(স্ট্রিং)
sorted_strings = [s for s in my_list if ''.join(sorted(s)) == s]

print("সাজানো স্ট্রিংগুলো:", sorted_strings)

আউটপুট


লিস্ট: ['pyt', 'Fdf', 'Fun']
সাজানো স্ট্রিংগুলো: ['Fdf']

ব্যাখ্যা

স্ট্রিংsorted(s)join(sorted)মিলে?
pyt['p', 't', 'y']ptyনা (pyt ≠ pty)
Fdf['F', 'd', 'f']Fdfহ্যাঁ (Fdf == Fdf) ✓
Fun['F', 'n', 'u']Fnuনা (Fun ≠ Fnu)

নোট: ASCII অর্ডারে বড় হাতের অক্ষর (Uppercase) ছোট হাতের (lowercase) থেকে আগে আসে। 'F' (70) < 'd' (100) < 'f' (102)।

কেস-ইনসেনসিটিভ সংস্করণ


sorted_strings = [
    s for s in my_list 
    if ''.join(sorted(s.lower())) == s.lower()
]
# ['Fdf', 'Fun']  -- 'fun' সাজানো = 'fnu' ≠ 'fun', তবুও?
# 'fun'.lower() = 'fun', sorted = 'fnu' → না
# 'Fdf'.lower() = 'fdf', sorted = 'ddf' → না

কেস-ইনসেনসিটিভে 'Fdf'ও ভ্যালিড নয়। মূল লজিক কেস-সেনসিটিভ।

উন্নত: strictly increasing ক্যারেক্টার চেক


def is_sorted_string(s):
    return all(s[i] <= s[i+1] for i in range(len(s)-1))

result = [s for s in my_list if is_sorted_string(s)]
# ['Fdf'] — F <= d <= f (ASCII: 70 <= 100 <= 102)

এটি sorted() কল ছাড়াই কাজ করে, O(n) টাইম।

  1. পাইথনে স্ট্রিংয়ের লিস্টকে টাপলের লিস্টে রূপান্তর

  2. পাইথনে লিস্ট সর্টেড কিনা যাচাই করুন

  3. পাইথনে লিস্ট অফ স্ট্রিং থেকে নম্বর এক্সট্র্যাক্ট করুন

  4. পাইথনে স্ট্রিংয়ের লিস্ট সর্ট করা