ازگر کا استعمال کرتے ہوئے سٹرنگز کا موازنہ کرنا

Python میں، تار حروف کی ترتیب ہیں، جو مؤثر طریقے سے میموری میں ایک آبجیکٹ کے طور پر محفوظ ہوتے ہیں۔ کا استعمال کرتے ہوئے ہر چیز کی شناخت کی جاسکتی ہے۔ id() طریقہ، جیسا کہ آپ نیچے دیکھ سکتے ہیں۔ Python ان چیزوں کو میموری میں دوبارہ استعمال کرنے کی کوشش کرتا ہے جن کی ایک ہی قدر ہوتی ہے، جس سے Python میں اشیاء کا موازنہ بہت تیزی سے ہوتا ہے:

$ 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()

تاروں کا موازنہ کرنے کے لیے، Python ایسا کرنے کے لیے کچھ مختلف آپریٹرز پیش کرتا ہے۔ سب سے پہلے، ہم ذیل میں ان کی مزید تفصیل سے وضاحت کریں گے۔ دوسرا، ہم دونوں پر جائیں گے۔ string اور re ماڈیولز، جن میں کیس غیر حساس اور غیر درست مماثلتوں کو ہینڈل کرنے کے طریقے ہوتے ہیں۔ تیسرا، ملٹی لائن سٹرنگز سے نمٹنے کے لیے difflib ماڈیول کافی آسان ہے. متعدد مثالیں آپ کو یہ سمجھنے میں مدد کریں گی کہ انہیں کیسے استعمال کیا جائے۔

The == اور != آپریٹرز کے ساتھ Strngs کا موازنہ کریں۔

ایک بنیادی موازنہ آپریٹر کے طور پر آپ استعمال کرنا چاہیں گے۔ == اور !=. وہ بالکل اسی طرح کام کرتے ہیں جیسے انٹیجر اور فلوٹ ویلیوز کے ساتھ۔ دی == آپریٹر واپس آتا ہے۔ True اگر ایک عین مطابق میچ ہے، دوسری صورت میں False واپس کر دیا جائے گا. اس کے برعکس، != آپریٹر واپس آتا ہے۔ True اگر کوئی میچ نہیں ہے اور دوسری صورت میں واپسی False. فہرست سازی 1 یہ ظاہر کرتا ہے.

ایک for لوپ، سوئس شہر "لوزان" کے نام پر مشتمل ایک سٹرنگ کا موازنہ دیگر مقامات کی فہرست کے اندراج سے کیا جاتا ہے، اور موازنہ کا نتیجہ 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 آپریٹر میموری میں آبجیکٹ ID کی بنیاد پر دو متغیرات کا موازنہ کرتا ہے۔

جان (ڈو) اور جان (مو) دونوں کو جان کہا جاتا ہے۔ اگر ہم ان کو صرف ان کے ناموں تک کم کر سکتے ہیں، تو وہ قدر میں برابر ہوں گے، لیکن پھر بھی دو مختلف افراد کوالٹی کے لحاظ سے۔

اگلی مثال یہ ظاہر کرتی ہے کہ سٹرنگ ویلیو کے ساتھ تین متغیرات کے لیے۔ دو متغیرات a اور b ایک ہی قدر ہے، اور Python میموری کے استعمال کو کم سے کم کرنے کے لیے ایک ہی چیز کا حوالہ دیتا ہے۔

یہ سادہ اقسام اور تاروں کے لیے بطور ڈیفالٹ کیا جاتا ہے، لیکن دیگر اشیاء کے لیے نہیں:

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

جیسے ہی قدر میں تبدیلی آتی ہے Python آبجیکٹ کو بحال کرے گا اور متغیر کو تفویض کرے گا۔ اگلے کوڈ کے ٹکڑوں میں b 2 کی قدر حاصل کرتا ہے، اور بعد میں b اور c اسی اعتراض کا حوالہ دیتے ہیں:

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

مزید موازنہ آپریٹرز

لغوی ترتیب کے حوالے سے موازنہ کے لیے آپ موازنہ آپریٹرز استعمال کر سکتے ہیں۔ <, >, <=، اور >=. موازنہ خود کردار کے لحاظ سے کیا جاتا ہے۔ ترتیب حروف تہجی میں حروف کی ترتیب پر منحصر ہے۔ یہ آرڈر اس کریکٹر ٹیبل پر منحصر ہے جو آپ کی مشین پر Python کوڈ کو عمل میں لاتے وقت استعمال میں ہے۔

ذہن میں رکھیں کہ آرڈر کیس حساس ہے۔ لاطینی حروف تہجی کی مثال کے طور پر، "بس" "بس" سے پہلے آتا ہے۔ فہرست سازی 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

کیس غیر حساس سٹرنگ موازنہ

پچھلی مثالیں تاروں کے درمیان عین مماثلت پر مرکوز تھیں۔ کیس غیر حساس موازنہ کی اجازت دینے کے لیے Python خصوصی سٹرنگ طریقے پیش کرتا ہے جیسے upper() اور lower(). یہ دونوں براہ راست اسٹرنگ آبجیکٹ کے طریقوں کے طور پر دستیاب ہیں۔

upper() پورے سٹرنگ کو بڑے حروف میں تبدیل کرتا ہے، اور lower() بالترتیب چھوٹے حروف میں۔ کی بنیاد پر فہرست سازی 1 اگلی فہرست دکھاتی ہے کہ کس طرح استعمال کیا جائے۔ lower() طریقہ.

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

فہرست 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 باقاعدہ اظہار - یا مختصر کے لیے "regex" - حروف کے ایک مخصوص پیٹرن کی وضاحت کرتا ہے۔

Python میں اس طریقہ کار کو استعمال کرنے کے لیے درآمد کریں۔ re ماڈیول پہلے اور ایک مخصوص پیٹرن کی وضاحت کریں، اگلا۔ ایک بار پھر، مندرجہ ذیل مثال پر مبنی ہے فہرست سازی 1. تلاش کا نمونہ "بے" سے میل کھاتا ہے، اور چھوٹے یا بڑے حروف سے شروع ہوتا ہے۔ واضح طور پر، مندرجہ ذیل Python کوڈ ان تمام تاروں کو تلاش کرتا ہے جن میں تلاش کا نمونہ ہوتا ہے اس سے کوئی فرق نہیں پڑتا ہے کہ سٹرنگ کی کس پوزیشن پر ہے - شروع میں، یا درمیان میں، یا آخر میں۔

فہرست 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")

آؤٹ پٹ مندرجہ ذیل ہے، اور جگہوں کی فہرست سے "Bayswater"، "Table Bay" اور "Bombay" سے میل کھاتا ہے:

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

ملٹی لائن اور فہرست موازنہ

اب تک ہمارا موازنہ صرف چند الفاظ پر ہوا ہے۔ کا استعمال کرتے ہوئے difflib ماڈیول Python ملٹی لائن سٹرنگز اور الفاظ کی پوری فہرستوں کا موازنہ کرنے کا ایک طریقہ بھی پیش کرتا ہے۔ آؤٹ پٹ کو مختلف ٹولز کے مختلف فارمیٹس کے مطابق ترتیب دیا جا سکتا ہے۔

اگلی مثال (فہرست سازی 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.

نتیجہ

اس مضمون میں آپ نے Python میں تاروں کا موازنہ کرنے کے مختلف طریقے سیکھے ہیں۔ ہم امید کرتے ہیں کہ یہ جائزہ آپ کو اپنے ڈویلپر کی زندگی میں مؤثر طریقے سے پروگرام کرنے میں مدد کرے گا۔

منظوریاں

مضمون کی تیاری کے دوران مصنف مینڈی نیومیئر کا شکریہ ادا کرنا چاہیں گے۔

ٹائم اسٹیمپ:

سے زیادہ Stackabuse