কোনও দুটি বর্ণমালার অক্ষরের মধ্যে ড্যাশগুলির সংখ্যা কীভাবে গণনা করা যায়?


10

আমাদের যদি বর্ণমালার একটি অক্ষর এবং কিছু ড্যাশ থাকে এবং আমরা এই স্ট্রিংয়ের যে কোনও দুটি বর্ণমালার অক্ষরের মধ্যে ড্যাশের সংখ্যা গণনা করতে চাই। এই কাজ করতে সবচেয়ে সহজ পদ্ধিতি হল উপায় কি?

উদাহরণ:

ইনপুট: a--bc---d-k

আউটপুট: 2031

এর অর্থ হ'ল ক এবং খ এর মধ্যে ২ টি ড্যাশ রয়েছে, বি ও সি এর মধ্যে 0 টি ড্যাশ, সি এবং ডি এর মধ্যে 3 টি ড্যাশ এবং ডি এবং কে এর মধ্যে 1 টি ড্যাশ

পাইগনে এই আউটপুট তালিকাটি খুঁজে পাওয়ার ভাল উপায় কী?


3
আপনি কেবল এটি লুপ দিয়ে চেষ্টা করতে পারেন।
বোসং চোই

1
@ বোসংচোই হ্যাঁ, আমি অবশ্যই লুপের জন্য চেষ্টা করেছি কিন্তু আমি বিভ্রান্ত হয়ে পড়েছি, আপনি কি আরও ব্যাখ্যা করতে পারেন?
13

@ Ch3steR আমি বিবেচনা করেছি যে আমাদের এমন ইনপুট নেই।
34-

2
সুতরাং উভয় a-b-cএবং a-----------bএকই আউটপুট হয়ে যাবে 11?
গাদা ওভারফ্লো

সেগুলি হাইফেন, ড্যাশ নয়।
ট্রিগ

উত্তর:


9

রেজেক্সের সাথে সমাধান:

import re

x = 'a--bc---d-k'

results = [
    len(m) for m in
    re.findall('(?<=[a-z])-*(?=[a-z])', x)
]
print(results)
print(''.join(str(r) for r in results))

আউটপুট:

[2, 0, 3, 1]
2031

ব্রুট ফোর্স লুপ যুক্তি দিয়ে সমাধান:

x = 'a--bc---d-k'

count = 0
results = []
for c in x:
    if c == '-':
        count += 1
    else:
        results.append(count)
        count = 0
results = results[1:]  # cut off first length
print(results)

আউটপুট:

[2, 0, 3, 1]

আমি ধরে নিলাম fপ্যাটার্নের সামনে একটা টাইপো? ব্যাকস্ল্যাশ ছাড়া আপনার কোনও কাঁচা স্ট্রিং তৈরি করার দরকার নেই। এছাড়াও ক্যাপচার গ্রুপের প্রয়োজন নেই =)। উত্তম উত্তরটি
জেভিডিভি

1
@ জেভিডিভি ভাল fধন্যবাদ জন্য ধন্যবাদ। আমি এফ-স্ট্রিং ব্যবহার করছিলাম, তবে উত্তরটি উন্নত করার সময় আমি সেই অংশটি ফেলেছিলাম, তবে আমি অপসারণটি ভুলে গিয়েছি f। আমি আমার উত্তর আপডেট। ঠিক
তেমন

1
@ টিম নংটি countকেবল resultsযখন যুক্ত হয় তখন যুক্ত c != '-'হয় encountered তাহলে xসঙ্গে প্রান্ত -, গত countউপেক্ষা করা হবে।
বোসোং চোই

11

আপনি এর মতো খুব সাধারণ সমাধানটি ব্যবহার করতে পারেন:

import re

s = 'a--bc---d-k'
# Create a list of dash strings.
dashes = re.split('[a-z]', s)[1:-1]
# Measure the length of each dash string in the list and join as a string.
results = ''.join([str(len(i)) for i in dashes])

আউটপুট:

'2031'


2

যদি আপনি ইনপুটটি কোনও ড্যাশ দিয়েও শুরু করতে পারেন তবে আপনি এটি ব্যবহার করতে পারেন:

def count_dashes(string):
    all_counts = []
    dash_count = 0
    for char in string:
        if char == "-":
            dash_count += 1
        else:
            all_counts.append(dash_count)
            dash_count = 0
    return all_counts

তবে যদি আপনার ইনপুটটি সর্বদা একটি চিঠি দিয়ে শুরু হয় তবে আপনি 0 টি পছন্দ করতে পারেন না যা সর্বদা তালিকার শীর্ষে থাকে।

আপনার যদি ইনসটির স্ট্রিং হিসাবে আউটপুটের প্রয়োজন হয় তবে আপনি এটি যুক্ত করতে পারেন:

def count_dashes(string):
    all_counts = []
    dash_count = 0
    for char in string:
        if char == "-":
            dash_count += 1
        else:
            all_counts.append(dash_count)
            dash_count = 0
    return "".join([str(number) for number in all_counts])

1

এখানে একটি সাধারণ লুপ পদ্ধতির:

myinput = 'a--bc---d-k'
output = []
output_count = -1
for elem in myinput:
  if elem == '-':
    output[output_count] = output[output_count]+1
  else:
    output.append(0)
    output_count += 1

print(output)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.