Python kullanarak Dizeleri Karşılaştırma

Python'da dizeler, bellekte bir nesne olarak etkili bir şekilde depolanan karakter dizileridir. Her nesne aşağıdakiler kullanılarak tanımlanabilir: id() Aşağıda göreceğiniz gibi bir yöntem var. Python, bellekteki aynı değere sahip nesneleri yeniden kullanmaya çalışır; bu da Python'da nesnelerin karşılaştırılmasını çok hızlı hale getirir:

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

Dizeleri karşılaştırmak için Python birkaç farklı operatör sunar. Öncelikle bunları aşağıda daha ayrıntılı olarak açıklayacağız. İkinci olarak, her ikisinin de üzerinden geçeceğiz string ve re Büyük/küçük harfe duyarlı olmayan ve tam olmayan eşleşmeleri işlemek için yöntemler içeren modüller. Üçüncüsü, çok satırlı dizelerle ilgilenmek için difflib modülü oldukça kullanışlıdır. Bir dizi örnek, bunların nasıl kullanılacağını anlamanıza yardımcı olacaktır.

Dizeleri == ve != Operatörleriyle Karşılaştırın

Temel bir karşılaştırma operatörü olarak kullanmak isteyeceksiniz == ve !=. Tamsayı ve kayan değer değerleriyle tamamen aynı şekilde çalışırlar. == operatör geri döner True tam bir eşleşme varsa, aksi halde False iade edilecek. Buna karşılık, != operatör geri döner True eşleşme yoksa geri dönerse False. Listeleme 1 bunu gösteriyor.

İçinde for Döngüde, İsviçre şehrinin "Lozan" adını içeren bir dize, diğer yerlerin listesindeki bir girdiyle karşılaştırılır ve karşılaştırma sonucu stdout'a yazdırılır.

Liste 1:


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

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

Python betiğini çıktının üstünden çalıştırmak aşağıdaki gibidir:

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

The == ve is Operatörler

Python'da iki karşılaştırma operatörü vardır == ve is. İlk bakışta aynı gibi görünüyorlar ama aslında değiller.

== İki değişkeni temsil ettikleri değere göre karşılaştırır. Buna karşılık, is operatörü, bellekteki nesne kimliğine göre iki değişkeni karşılaştırır.

John (Doe) ve John'un (Moe) her ikisine de John denir. Eğer onları sadece isimlerine indirgeyebilirsek, değer olarak eşit olurlar ama yine de nitelik olarak iki farklı kişiler olurlar.

Sonraki örnek, dize değerlerine sahip üç değişken için bunu göstermektedir. İki değişken a ve b aynı değere sahiptir ve Python, bellek kullanımını en aza indirmek için aynı nesneyi ifade eder.

Bu, varsayılan olarak basit türler ve dizeler için yapılır, ancak diğer nesneler için yapılmaz:

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

Değer değişir değişmez Python nesneyi yeniden başlatacak ve değişkeni atayacaktır. Bir sonraki kod parçacığında b 2 değerini alır ve ardından b ve c aynı nesneye bakın:

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

Daha Fazla Karşılaştırma Operatörleri

Sözlüksel bir sıraya ilişkin bir karşılaştırma için karşılaştırma operatörlerini kullanabilirsiniz. <, >, <=, ve >=. Karşılaştırmanın kendisi karakter karakter yapılır. Sıra, alfabedeki karakterlerin sırasına bağlıdır. Bu sıra, Python kodunu çalıştırırken makinenizde kullanılan karakter tablosuna bağlıdır.

Sıralamanın büyük/küçük harfe duyarlı olduğunu unutmayın. Latin alfabesine örnek olarak “Otobüs”, “otobüs”ten önce gelir. Listeleme 2 bu karşılaştırma operatörlerinin pratikte nasıl çalıştığını gösterir.

Liste 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}")

Python betiğini çıktının üstünden çalıştırmak aşağıdaki gibidir:

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

Büyük/Küçük Harfe Duyarsız Dize Karşılaştırmaları

Önceki örnekler dizeler arasındaki tam eşleşmelere odaklanıyordu. Büyük/küçük harfe duyarlı olmayan karşılaştırmalara izin vermek için Python, aşağıdaki gibi özel dize yöntemleri sunar: upper() ve lower(). Her ikisi de doğrudan ilgili dize nesnesinin yöntemleri olarak mevcuttur.

upper() dizenin tamamını büyük harflere dönüştürür ve lower() sırasıyla küçük harflere dönüştürür. Dayalı Listeleme 1 sonraki listede bu özelliğin nasıl kullanılacağı gösterilmektedir lower() yöntemi.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Liste 3:


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

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

Çıktı aşağıdaki gibidir:

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

Normal İfadeler (RegEx) Kullanarak Dizeleri Karşılaştırın

A Düzenli İfade – veya kısaca “regex” – belirli bir karakter modelini tanımlar.

Python'da bu mekanizmayı kullanmak için re modül önce ve sonra belirli bir modeli tanımlayın. Yine aşağıdaki örnek buna dayanmaktadır Listeleme 1. Arama düzeni "bölme" ile eşleşir ve küçük veya büyük harfle başlar. Tam olarak, aşağıdaki Python kodu, dizenin hangi konumunda olursa olsun - başında, ortasında veya sonunda - arama modelinin oluştuğu tüm dizeleri bulur.

Liste 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")

Çıktı aşağıdaki gibidir ve yerler listesindeki "Bayswater", "Table Bay" ve "Bombay" ile eşleşir:

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

Çoklu Satır ve Liste Karşılaştırmaları

Şu ana kadar karşılaştırmalarımız sadece birkaç kelime üzerinden oldu. Kullanmak difflib Python modülü ayrıca çok satırlı dizeleri ve tüm sözcük listelerini karşılaştırmanın bir yolunu sunar. Çıkış, fark araçlarının çeşitli formatlarına göre yapılandırılabilir.

Bir sonraki örnek (Listeleme 5) iki çok satırlı dizeyi satır satır karşılaştırır ve eklemelerin yanı sıra silmeleri de gösterir. Başlatmanın ardından Differ 12. satırdaki nesne karşılaştırma kullanılarak yapılır. compare() 15. satırdaki yöntem. Sonuç standart çıktıya yazdırılır:


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

Betiği çalıştırmak aşağıda görüldüğü gibi çıktıyı oluşturur. Silinen satırlar şu şekilde gösterilir: - işaretler, eklemeli satırlar ise bir ile başlar + imza. Ayrıca değişiklik yapılan satırlar soru işaretiyle başlar. Değişiklikler kullanılarak gösterilir ^ uygun pozisyonda işaretler. Göstergesiz satırlar hala aynı:

$ 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.

Sonuç

Bu makalede Python'da dizeleri karşılaştırmanın çeşitli yollarını öğrendiniz. Bu genel bakışın, geliştiricinizin hayatında etkili bir şekilde programlama yapmanıza yardımcı olacağını umuyoruz.

Teşekkür

Yazar, makalenin hazırlanmasındaki desteğinden dolayı Mandy Neumeyer'e teşekkür eder.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı