সমস্যা বিবরণ
একটি স্ট্রিং সিরিজ দেওয়া আছে। লক্ষ্য হলো যেসব স্ট্রিং 'a' অক্ষরে শুরু হয় এবং 'a' অক্ষরে শেষ হয়, সেগুলো ফিল্টার করে বের করা।
ইনপুট সিরিজ
0 apple
1 oranges
2 alpha
3 aroma
4 beta
সমাধান ১: রেগুলার এক্সপ্রেশন (Regex) ব্যবহার করে
- রেজেক্স প্যাটার্ন:
r'^[a]$|^([a]).*\\1$'— এটি একক 'a' বা 'a' দিয়ে শুরু ও 'a' দিয়ে শেষ হওয়া স্ট্রিং ম্যাচ করে। - ফিল্টার করুন লুপ ও
re.searchব্যবহার করে। - সিরিজে ফিল্টার 적용 করুন
isin()দিয়ে।
import pandas as pd
import re
l = ["apple","oranges","alpha","aroma","beta"]
data = pd.Series(l)
exp = r'^[a]$|^([a]).*\1$'
ls = []
for i in data:
if re.search(exp, i):
ls.append(i)
print(data[data.isin(ls)])
সমাধান ২: স্ট্রিং মেথড startswith() ও endswith() ব্যবহার করে (সरल ও পঠনীয়)
import pandas as pd
l = ["apple","oranges","alpha","aroma","beta"]
data = pd.Series(l)
# ল্যাম্বডা ও ফিল্টার ব্যবহার করে
result = list(filter(lambda x: x.startswith('a') and x.endswith('a'), l))
print(data[data.isin(result)])
# অথবা ভেক্টরাইজড স্ট্রিং অ্যাক্সেসর দিয়ে (সর্বোত্তম)
mask = data.str.startswith('a') & data.str.endswith('a')
print(data[mask])
আউটপুট (দুই পদ্ধতিরই)
2 alpha
3 aroma
dtype: object
ব্যাখ্যা: 'alpha' (a...a) এবং 'aroma' (a...a) শর্ত পূরণ করে। 'apple' (a...e) এবং 'oranges' (o...s) পূরণ করে না। ভেক্টরাইজড পদ্ধতি data.str.startswith('a') & data.str.endswith('a') সবচেয়ে দ্রুত এবং পাইথনিক।