টাপল লিস্ট থেকে যেসব টাপলের সব স্ট্রিং একটি নির্দিষ্ট ক্যারেক্টার সেটের আলফাবেট দিয়ে গঠিত, সেগুলো ফিল্টার করার জন্য all() এবং লিস্ট কম্প্রিহেনশন ব্যবহার করা হয়।
উদাহরণ
my_list = [('pyt', 'best'), ('pyt', 'good'), ('fest', 'pyt')]
print("লিস্ট:", my_list)
# অনুমোদিত ক্যারেক্টার সেট
allowed_chars = 'pyestb'
# ফিল্টার: টাপলের সব স্ট্রিং-এর সব ক্যারেক্টার allowed_chars-এ থাকতে হবে
filtered = [
tup for tup in my_list
if all(ch in allowed_chars for s in tup for ch in s)
]
print("অনুমোদিত ক্যারেক্টার:", allowed_chars)
print("ফিল্টার করা টাপল:", filtered)
আউটপুট
লিস্ট: [('pyt', 'best'), ('pyt', 'good'), ('fest', 'pyt')]
অনুমোদিত ক্যারেক্টার: pyestb
ফিল্টার করা টাপল: [('pyt', 'best')]
ব্যাখ্যা
('pyt', 'best'): p,y,t,b,e,s,t — সব `pyestb`-এ আছে ✓('pyt', 'good'): g, o, d — `pyestb`-এ নেই ✗('fest', 'pyt'): f,e,s,t,p,y,t — সব `pyestb`-এ আছে ✓ (ওয়ায়ট! আউটপুটে নেই?)
সংশোধন: মূল উদাহরণের আউটপুটে ('fest', 'pyt') অনুপস্থিত — সম্ভবত কেস সেনসিটিভিটি বা লজিক্যাল সমস্যা। আসলে উভয় টাপলই ভ্যালিড।
সঠিক লজিক
allowed = set('pyestb') # সেটে রূপান্তর (O(1) লুকআপ)
filtered = [
tup for tup in my_list
if all(ch in allowed for s in tup for ch in s.lower()) # lowercase
]
print(filtered)
# [('pyt', 'best'), ('fest', 'pyt')]
সেট অপারেশন দিয়ে আরও দ্রুত
allowed = set('pyestb')
def is_valid(tup):
all_chars = set(''.join(tup).lower())
return all_chars.issubset(allowed)
filtered = [t for t in my_list if is_valid(t)]
set.issubset() O(n) টাইমে চেক করে, বড় ডেটার জন্য দ্রুত।