স্ট্রিং লিস্টে প্রতিটি ক্যারেক্টার কোনো কোনো স্ট্রিং-এ (ইন্ডেক্স) আছে তা ম্যাপ করার জন্য defaultdict(set), enumerate() এবং split() ব্যবহার করা হয়।
উদাহরণ
from collections import defaultdict
my_list = ['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']
print("লিস্ট:", my_list)
# ক্যারেক্টার -> স্ট্রিং ইন্ডেক্সের সেট (১-ভিত্তিক)
char_map = defaultdict(set)
for idx, s in enumerate(my_list):
for ch in s.split(): # স্পেস দিয়ে আলাদা করা হয়েছে
char_map[ch].add(idx + 1) # ১-ভিত্তিক ইন্ডেক্স
# সেটকে লিস্টে রূপান্তর
result = {ch: sorted(indices) for ch, indices in char_map.items()}
print("ক্যারেক্টার -> স্ট্রিং ইন্ডেক্স ম্যাপ:")
for ch in sorted(result.keys()):
print(f" '{ch}': {result[ch]}")
আউটপুট
লিস্ট: ['p y t h o n', 'i s', 'f u n', 't o', 'l e a r n']
ক্যারেক্টার -> স্ট্রিং ইন্ডেক্স ম্যাপ:
'a': [5]
'e': [5]
'f': [3]
'h': [1]
'i': [2]
'l': [5]
'n': [1, 3, 5]
'o': [1, 4]
'p': [1]
'r': [5]
's': [2]
't': [1, 4]
'u': [3]
'y': [1]
ব্যাখ্যা
enumerate(my_list)— (ইন্ডেক্স, স্ট্রিং) জোড়া দেয়s.split()— স্পেস-সেপারেটেড ক্যারেক্টারগুলো আলাদা করেdefaultdict(set)— অটোমেটিক সেট তৈরি করে, ডুপ্লিকেট এড়ায়idx + 1— ১-ভিত্তিক ইন্ডেক্স (মানব-পঠনযোগ্য)
স্পেস ছাড়া স্ট্রিং হলে
my_list = ['python', 'is', 'fun', 'to', 'learn']
char_map = defaultdict(set)
for idx, s in enumerate(my_list):
for ch in s: # সরাসরি ক্যারেক্টার ইটারেশন
char_map[ch].add(idx)
result = {ch: sorted(indices) for ch, indices in char_map.items()}
পandas-এ বিষয়ক এনালাইসিস
import pandas as pd
df = pd.DataFrame({'text': my_list})
# এক্সপ্লোড করে ক্যারেক্টার-লেভেল অ্যানালাইসিস
exploded = df['text'].apply(list).explode().reset_index()
# exploded.columns = ['string_idx', 'char']
# grouped = exploded.groupby('char')['string_idx'].apply(list)