পাইথন ব্যবহার করে স্ট্রিং তুলনা করা

পাইথনে, স্ট্রিংগুলি অক্ষরের ক্রম, যা কার্যকরভাবে একটি বস্তু হিসাবে মেমরিতে সংরক্ষণ করা হয়। প্রতিটি বস্তু ব্যবহার করে সনাক্ত করা যেতে পারে id() পদ্ধতি, আপনি নীচে দেখতে পারেন। পাইথন মেমরিতে বস্তুগুলিকে পুনরায় ব্যবহার করার চেষ্টা করে যেগুলির একই মান রয়েছে, যা পাইথনে খুব দ্রুত বস্তুর তুলনা করে:

$ python
Python 3.9.0 (v3.9.0:9cf6752276, Oct  5 2020, 11:29:23) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = "abc"
>>> b = "abc"
>>> c = "def"
>>> print (id(a), id(b), id(c))
(139949123041320, 139949123041320, 139949122390576)
>>> quit()

স্ট্রিং তুলনা করার জন্য, পাইথন এটি করার জন্য কয়েকটি ভিন্ন অপারেটর অফার করে। প্রথমত, আমরা নীচে তাদের আরও বিশদে ব্যাখ্যা করব। দ্বিতীয়ত, আমরা উভয় উপর যেতে হবে string এবং re মডিউল, যাতে কেস-অসংবেদনশীল এবং অযৌক্তিক মিলগুলি পরিচালনা করার পদ্ধতি রয়েছে। তৃতীয়, মাল্টি লাইন স্ট্রিং মোকাবেলা করতে difflib মডিউল বেশ সুবিধাজনক। কয়েকটি উদাহরণ আপনাকে সেগুলি কীভাবে ব্যবহার করতে হয় তা বুঝতে সাহায্য করবে।

The == এবং != অপারেটরগুলির সাথে স্ট্রিংস তুলনা করুন

একটি মৌলিক তুলনা অপারেটর হিসাবে আপনি ব্যবহার করতে চাইবেন == এবং !=. তারা পূর্ণসংখ্যা এবং ফ্লোট মানগুলির মতো ঠিক একইভাবে কাজ করে। দ্য == অপারেটর ফিরে আসে True যদি একটি সঠিক মিল থাকে, অন্যথায় False ফেরত দেওয়া হবে। বিপরীতে, != অপারেটর ফিরে আসে True যদি কোন মিল না থাকে এবং অন্যথায় ফিরে আসে False. তালিকা 1 এটি প্রদর্শন করে।

একটি ইন for loop, সুইস শহর "Lausanne" এর নাম সম্বলিত একটি স্ট্রিংকে অন্যান্য স্থানের তালিকা থেকে একটি এন্ট্রির সাথে তুলনা করা হয় এবং তুলনা ফলাফল stdout এ মুদ্রিত হয়।

তালিকা 1:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "Lausanne"

for place in listOfPlaces:
    print (f"comparing {place} with {currentCity}: %{place == currentCity}")

আউটপুটের উপরে থেকে পাইথন স্ক্রিপ্ট চালানো নিম্নরূপ:

$ python3 comparing-strings.py
comparing Berlin with Lausanne: False
comparing Paris with Lausanne: False
comparing Lausanne with Lausanne: True

সার্জারির == এবং is অপারেটর

পাইথনের দুটি তুলনা অপারেটর রয়েছে == এবং is. প্রথম দর্শনে তারা একই বলে মনে হয়, কিন্তু আসলে তারা তা নয়।

== তারা যে মানের প্রতিনিধিত্ব করে তার উপর ভিত্তি করে দুটি ভেরিয়েবলের তুলনা করে। বিপরীতে, is অপারেটর মেমরিতে অবজেক্ট আইডির উপর ভিত্তি করে দুটি ভেরিয়েবলের তুলনা করে।

জন (ডো) এবং জন (মো) উভয়কেই জন বলা হয়। যদি আমরা সেগুলিকে কেবলমাত্র তাদের নামে কমিয়ে আনতে পারি, তবে তারা মূল্যে সমান হবে, তবে গুণগতভাবে দুটি ভিন্ন ব্যক্তি।

পরবর্তী উদাহরণ দেখায় যে স্ট্রিং মান সহ তিনটি ভেরিয়েবলের জন্য। দুটি ভেরিয়েবল a এবং b একই মান আছে, এবং Python একই বস্তুকে বোঝায় যাতে মেমরির ব্যবহার কম হয়।

এটি ডিফল্টরূপে সাধারণ প্রকার এবং স্ট্রিংগুলির জন্য করা হয়, তবে অন্যান্য বস্তুর জন্য নয়:

>>> a = 'hello'
>>> b = 'hello'
>>> c = 'world'
>>> a is b
True
>>> a is c
False
>>> id(a)
140666888153840
>>> id(b)
140666888153840
>>> 

মান পরিবর্তনের সাথে সাথে পাইথন বস্তুটিকে পুনরুদ্ধার করবে এবং ভেরিয়েবল বরাদ্দ করবে। পরবর্তী কোড স্নিপেটে b 2 এর মান পায়, এবং পরবর্তীকালে b এবং c একই বস্তু পড়ুন:

>>> b = 'world'
>>> id(b)
140666888154416
>>> id(c)
140666888154416

আরো তুলনা অপারেটর

একটি অভিধানিক ক্রম সম্পর্কিত তুলনার জন্য আপনি তুলনা অপারেটর ব্যবহার করতে পারেন <, >, <=, এবং >=. তুলনা নিজেই চরিত্র দ্বারা চরিত্র করা হয়. ক্রম বর্ণমালার অক্ষরের ক্রম উপর নির্ভর করে। এই অর্ডারটি অক্ষর টেবিলের উপর নির্ভর করে যা পাইথন কোড চালানোর সময় আপনার মেশিনে ব্যবহৃত হয়।

মনে রাখবেন অর্ডারটি কেস-সংবেদনশীল। ল্যাটিন বর্ণমালার উদাহরণ হিসাবে, "বাস" "বাস" এর আগে আসে। তালিকা 2 দেখায় কিভাবে এই তুলনা অপারেটরগুলি অনুশীলনে কাজ করে।

তালিকা 2:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "Lausanne"

for place in listOfPlaces:
    if place < currentCity:
            print (f"{place} comes before {currentCity}")
    elif place > currentCity:
            print (f"{place} comes after {currentCity}")
    else:
            print (f"{place} is equal to {currentCity}")

আউটপুটের উপরে থেকে পাইথন স্ক্রিপ্ট চালানো নিম্নরূপ:

$ python3 comparing-strings-order.py
Berlin comes before Lausanne
Paris comes after Lausanne
Lausanne is equal to Lausanne

কেস-সংবেদনশীল স্ট্রিং তুলনা

পূর্ববর্তী উদাহরণগুলি স্ট্রিংগুলির মধ্যে সঠিক মিলগুলির উপর দৃষ্টি নিবদ্ধ করে। কেস-সংবেদনশীল তুলনা করার অনুমতি দিতে পাইথন বিশেষ স্ট্রিং পদ্ধতি যেমন অফার করে upper() এবং lower(). তাদের উভয়ই সরাসরি স্ট্রিং অবজেক্টের পদ্ধতি হিসাবে উপলব্ধ।

upper() পুরো স্ট্রিংটিকে বড় হাতের অক্ষরে রূপান্তর করে, এবং lower() যথাক্রমে ছোট হাতের অক্ষরে। উপর ভিত্তি করে তালিকা 1 পরবর্তী তালিকা দেখায় কিভাবে ব্যবহার করতে হয় lower() পদ্ধতি।

সেরা-অভ্যাস, শিল্প-স্বীকৃত মান এবং অন্তর্ভুক্ত চিট শীট সহ গিট শেখার জন্য আমাদের হ্যান্ডস-অন, ব্যবহারিক গাইড দেখুন। গুগলিং গিট কমান্ড এবং আসলে বন্ধ করুন শেখা এটা!

তালিকা 3:


listOfPlaces = ["Berlin", "Paris", "Lausanne"]
currentCity = "lausANne"

for place in listOfPlaces:
    print (f"comparing {place} with {place.lower() == currentCity.lower()}: {currentCity}")

আউটপুট নিম্নরূপ:

$ python3 comparing-strings-case-insensitive.py
comparing Berlin with lausANne: False
comparing Paris with lausANne: False
comparing Lausanne with lausANne: True

রেগুলার এক্সপ্রেশন (RegEx) ব্যবহার করে স্ট্রিং তুলনা করুন

A রেগুলার এক্সপ্রেশন - বা সংক্ষেপে "রেজেক্স" - অক্ষরের একটি নির্দিষ্ট প্যাটার্ন সংজ্ঞায়িত করে।

পাইথনে এই প্রক্রিয়াটি ব্যবহার করতে আমদানি করুন re মডিউল প্রথমে এবং একটি নির্দিষ্ট প্যাটার্ন সংজ্ঞায়িত করুন, পরবর্তী। আবার, নিম্নলিখিত উদাহরণ উপর ভিত্তি করে তালিকা 1. অনুসন্ধান প্যাটার্নটি "বে" এর সাথে মেলে এবং একটি ছোট হাতের বা একটি বড় হাতের অক্ষর দিয়ে শুরু হয়। সুনির্দিষ্টভাবে, নিম্নলিখিত পাইথন কোডটি এমন সমস্ত স্ট্রিং খুঁজে পায় যেখানে অনুসন্ধান প্যাটার্নটি স্ট্রিংটির কোন অবস্থানে - শুরুতে বা মাঝামাঝি বা শেষে যাই হোক না কেন ঘটে।

তালিকা 4:


import re


listOfPlaces = ["Bayswater", "Table Bay", "Bejing", "Bombay"]


pattern = re.compile("[Bb]ay")

for place in listOfPlaces:
    if pattern.search(place):
        print (f"{place} matches the search pattern")

আউটপুটটি নিম্নরূপ, এবং স্থানগুলির তালিকা থেকে "বেসওয়াটার", "টেবিল বে", এবং "বোম্বে" এর সাথে মেলে:

$ python3 comparing-strings-re.py
Bayswater matches the search pattern
Table Bay matches the search pattern
Bombay matches the search pattern

মাল্টি-লাইন এবং তালিকা তুলনা

এখন পর্যন্ত আমাদের তুলনা শুধুমাত্র কয়েকটি শব্দের উপর হয়েছে। ব্যবহার করে difflib মডিউল পাইথন মাল্টি-লাইন স্ট্রিং এবং শব্দের সম্পূর্ণ তালিকা তুলনা করার একটি উপায়ও প্রদান করে। আউটপুট ডিফ টুলের বিভিন্ন ফরম্যাট অনুযায়ী কনফিগার করা যেতে পারে।

পরবর্তী উদাহরণ (তালিকা 5) লাইন দ্বারা দুটি মাল্টি-লাইন স্ট্রিং তুলনা করে, এবং মুছে ফেলার পাশাপাশি সংযোজন দেখায়। শুরুর পর Differ 12 লাইনের বস্তুটি ব্যবহার করে তুলনা করা হয় compare() 15 লাইনে পদ্ধতি। ফলাফলটি স্ট্যান্ডার্ড আউটপুটে মুদ্রিত হয়:


import difflib
 


original = ["About the IIS", "", "IIS 8.5 has several improvements related", "to performance in large-scale scenarios, such", "as those used by commercial hosting providers and Microsoft's", "own cloud offerings."]


edited = ["About the IIS", "", "It has several improvements related", "to performance in large-scale scenarios."]


d = difflib.Differ()
 

diff = d.compare(original, edited)
 

print ('n'.join(diff))

স্ক্রিপ্ট চালানো নিচের মত আউটপুট তৈরি করে। মুছে ফেলার সাথে লাইন দ্বারা নির্দেশিত হয় - চিহ্ন যেখানে সংযোজন সহ লাইনগুলি a দিয়ে শুরু হয় + চিহ্ন. উপরন্তু, পরিবর্তন সহ লাইন একটি প্রশ্ন চিহ্ন দিয়ে শুরু হয়। পরিবর্তন ব্যবহার করে নির্দেশিত হয় ^ অনুযায়ী অবস্থানে চিহ্ন। একটি সূচক ছাড়া লাইন এখনও একই:

$ python comparing-strings-difflib.py
  About the IIS
  
- IIS 8.5 has several improvements related
?  ^^^^^^

+ It has several improvements related
?  ^

- to performance in large-scale scenarios, such
?                                        ^^^^^^

+ to performance in large-scale scenarios.
?                                        ^

- as those used by commercial hosting providers and Microsoft's
- own cloud offerings.

উপসংহার

এই নিবন্ধে আপনি পাইথনে স্ট্রিং তুলনা করার বিভিন্ন উপায় শিখেছেন। আমরা আশা করি যে এই ওভারভিউ আপনাকে আপনার বিকাশকারীর জীবনে কার্যকরভাবে প্রোগ্রামিং করতে সহায়তা করবে।

প্রাপ্তি স্বীকার

লেখক নিবন্ধটি প্রস্তুত করার সময় তার সমর্থনের জন্য ম্যান্ডি নিউমেয়ারকে ধন্যবাদ জানাতে চাই।

সময় স্ট্যাম্প:

থেকে আরো Stackabuse