ধরুন আমাদের একটি সংখ্যাসূচক স্ট্রিং s-এ কয়েকটি সংখ্যা রয়েছে। সংখ্যা একাধিক বার ঘটতে পারে. আমাদের কিছু জোড়া (অঙ্ক, গণনা) ফেরত দিতে হবে যা প্রতিনিধিত্ব করে কোন সংখ্যাটি পরপর কতবার s এ এসেছে। এই সমস্যাটি সমাধান করতে আমরা গ্রুপবাই() ফাংশনটি ব্যবহার করতে পারি যা itertools লাইব্রেরির অধীনে আসে। এটি একটি ইটারেটর অবজেক্ট ফিরিয়ে দেবে যার ভিতরে প্রতিটি আইটেম থাকবে প্রথম স্থানে এবং আরেকটি গ্রুপবাই অবজেক্ট দ্বিতীয় স্থানে। আমাদের প্রতিটি জোড়ার জন্য দলগতভাবে বস্তুর সংখ্যা গণনা করতে হবে।
সুতরাং, যদি ইনপুটটি s ="11522226551" এর মতো হয়, তবে আউটপুট হবে [(1, 2), (5, 1), (2, 4), (6, 1), (5, 2), ( 1, 1)] কারণ শুরুতে 1 দুইবার, তারপর একক 5 তারপর চার 2s ইত্যাদি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- এটি :=s এর জন্য গ্রুপবাই ফাংশন কল করুন
- ret :=একটি নতুন তালিকা
- এতে প্রতিটি জোড়ার (ডিজিট, জিপি) জন্য, করুন
- ret এ সন্নিবেশ (gp তালিকার অঙ্ক এবং দৈর্ঘ্য)
- রিটার্ন রিটার্ন
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
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)]