ধরুন আমাদের একটি न्यুমেরিক স্ট্রিং s আছে যাতে কিছু ডিজিট আছে। ডিজিটগুলো একাধিকবার হতে পারে। আমাদের কিছু পেয়ার (digit, count) রিটার্ন করতে হবে যা রিপ্রেজেন্ট করবে কোন ডিজিট কতবার ম 쭉বার এসে আছে। এই সমস্যা সমাধানের জন্য আমরা itertools লাইব্রেরির groupby() ফাংশন ব্যবহার করতে পারি। এটি একটি ইটেরেটর অবজেক্ট রিটার্ন করে যেখানে প্রতিটি আইটেমে প্রথমে ক্যারেক্টার এবং দ্বিতীয়ে গ্রুপবায় অবজেক্ট থাকে। আমাদের প্রতিটি পেয়ারের জন্য গ্রুপবায় অবজেক্টের সংখ্যা কাউন্ট করতে হবে।
উদাহরণস্বরূপ, যদি ইনপুট s = "11522226551" হয়, তবে আউটপুট হবে [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)] কারণ শুরুতে ১ দুবার, তারপর একটা ৫, তারপর চারটা ২ ইত্যাদি।
সমাধানের ধাপসমূহ
it := groupby(s)কল করুনret :=একটি নতুন লিস্ট- প্রতিটি পেয়ার
(digit, gp)ইনitএর জন্য:(int(digit), len(list(gp)))ret-এ ইনসার্ট করুন
retরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝার জন্য:
from itertools import groupby
def solve(s):
it = groupby(s)
ret = []
for digit, gp in it:
ret.append((int(digit), len(list(gp))))
return ret
s = "11522226551"
print(solve(s))
ইনপুট
"11522226551"
আউটপুট
[(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), (1, 1)]