একটি মিক্সড লিস্টে লাগাতার স্ট্রিং এলিমেন্টগুলো গ্রুপ করে সাব-লিস্ট বানাতে itertools.groupby এবং জেনারেটর (yield) ব্যবহার করা হয়।
উদাহরণ
from itertools import groupby
def string_check(elem):
return isinstance(elem, str)
def group_string(my_list):
for key, grp in groupby(my_list, key=string_check):
if key:
yield list(grp)
else:
yield from grp
my_list = [52, 11, 'py', 'th', 'on', 11, 52, 'i', 's', 18, 'f', 'un', 99]
print("The list is :")
print(my_list)
my_result = [*group_string(my_list)]
print("The result is:")
print(my_result)
আউটপুট
The list is : [52, 11, 'py', 'th', 'on', 11, 52, 'i', 's', 18, 'f', 'un', 99]
The result is: [52, 11, ['py', 'th', 'on'], 11, 52, ['i', 's'], 18, ['f', 'un'], 99]
ব্যাখ্যা
string_check: এলিমেন্ট স্ট্রিং কিনা চেক করে।group_string:groupbyদিয়ে কন্টিগুয়াস গ্রুপ বানায়। স্ট্রিং গ্রুপ হলে লিস্ট বানায় (yield list(grp)), নন-স্ট্রিং হলে আলাদা করে দেয় (yield from grp)।- বাহিরে লিস্ট ডিফাইন করে জেনারেটর কল করা হয় এবং আনপ্যাক (
*) করে লিস্ট বানানো হয়।
ব্যবহার: মিক্সড টাইপ ডেটা প্রসেসিং, টেক্সট সেগমেন্টেশন ইত্যাদিতে উপকারী।