কম্পিউটার টিউটোরিয়াল

পাইথনে স্ট্রিংয়ের কনsekutিভ এলিমেন্টের পেয়ার কাউন্ট করার প্রোগ্রাম

ধরুন আমাদের একটি न्यুমেরিক স্ট্রিং 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)]
  1. পাইথনে যোগফল ১ হয় এমন ফ্র্যাকশন জোড়ার সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে সन्नিহিত একই এলিমেন্টগুলো সাবলিস্টে প্যাক করার প্রোগ্রাম

  3. কনসিকিউটিভ ১ ছাড়া বাইনারি স্ট্রিংয়ের সংখ্যা গণনা করার পাইথন প্রোগ্রাম

  4. কুইকসর্টের পাইথন প্রোগ্রাম