Membandingkan String menggunakan Python

Dalam Python, string adalah urutan karakter, yang secara efektif disimpan dalam memori sebagai objek. Setiap objek dapat diidentifikasi menggunakan id() metode, seperti yang Anda lihat di bawah ini. Python mencoba menggunakan kembali objek dalam memori yang memiliki nilai yang sama, yang juga membuat pembandingan objek menjadi sangat cepat di 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()

Untuk membandingkan string, Python menawarkan beberapa operator berbeda untuk melakukannya. Pertama, kami akan menjelaskannya secara lebih rinci di bawah ini. Kedua, kita akan membahas keduanya string dan re modules, yang berisi metode untuk menangani pencocokan case-insensitive dan inexact. Ketiga, untuk menangani string multi-baris modul difflib cukup berguna. Sejumlah contoh akan membantu Anda memahami cara menggunakannya.

Bandingkan Strngs dengan Operator == dan !=

Sebagai operator perbandingan dasar yang ingin Anda gunakan == dan !=. Mereka bekerja dengan cara yang persis sama dengan nilai integer dan float. Itu == pengembalian operator True jika ada yang sama persis, sebaliknya False akan dikembalikan. Sebaliknya, != pengembalian operator True jika tidak ada kecocokan dan sebaliknya kembali False. Daftar 1 menunjukkan ini.

Di sebuah for loop, string yang berisi nama kota Swiss "Lausanne" dibandingkan dengan entri dari daftar tempat lain, dan hasil perbandingan dicetak di stdout.

Daftar 1:


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

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

Menjalankan skrip Python dari atas hasilnya adalah sebagai berikut:

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

Grafik == dan is Operator

Python memiliki dua operator perbandingan == dan is. Pada pandangan pertama mereka tampak sama, tetapi sebenarnya tidak.

== membandingkan dua variabel berdasarkan nilai yang mereka wakili. Sebaliknya, is operator membandingkan dua variabel berdasarkan ID objek di memori.

John (Doe) dan John (Moe) keduanya disebut John. Jika kita dapat mereduksinya menjadi hanya nama mereka, nilainya akan sama, tetapi masih dua orang yang berbeda secara kualitatif.

Contoh selanjutnya menunjukkan bahwa untuk tiga variabel dengan nilai string. Kedua variabel a dan b memiliki nilai yang sama, dan Python merujuk ke objek yang sama untuk meminimalkan penggunaan memori.

Ini dilakukan untuk tipe dan string sederhana secara default, tetapi tidak untuk objek lain:

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

Segera setelah nilainya berubah, Python akan mengembalikan objek dan menetapkan variabel. Di cuplikan kode berikutnya b mendapat nilai 2, dan seterusnya b dan c merujuk ke objek yang sama:

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

Lebih Banyak Operator Perbandingan

Untuk perbandingan mengenai urutan leksikografis, Anda dapat menggunakan operator perbandingan <, >, <=, dan >=. Perbandingan itu sendiri dilakukan karakter demi karakter. Urutannya tergantung pada urutan karakter dalam alfabet. Urutan ini bergantung pada tabel karakter yang digunakan pada mesin Anda saat mengeksekusi kode Python.

Ingatlah bahwa urutan peka huruf besar-kecil. Sebagai contoh untuk alfabet Latin, "Bus" muncul sebelum "bus". Daftar 2 menunjukkan bagaimana operator pembanding ini bekerja dalam praktiknya.

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

Menjalankan skrip Python dari atas hasilnya adalah sebagai berikut:

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

Perbandingan String Case-Insensitive

Contoh sebelumnya berfokus pada pencocokan tepat antara string. Untuk mengizinkan perbandingan case-insensitive Python menawarkan metode string khusus seperti upper() dan lower(). Keduanya tersedia langsung sebagai metode dari objek string yang sesuai.

upper() mengubah seluruh string menjadi huruf besar, dan lower() menjadi huruf kecil, masing-masing. Berdasarkan Daftar 1 daftar berikutnya menunjukkan cara menggunakan lower() Metode.

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

Daftar 3:


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

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

Outputnya adalah sebagai berikut:

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

Bandingkan String Menggunakan Ekspresi Reguler (RegEx)

A Regular Expression – atau singkatnya “regex” – mendefinisikan pola karakter tertentu.

Untuk memanfaatkan mekanisme ini di Python, impor file re modul pertama dan tentukan pola tertentu, selanjutnya. Sekali lagi, contoh berikut didasarkan pada Daftar 1. Pola pencarian cocok dengan “bay”, dan dimulai dengan huruf kecil atau huruf besar. Tepatnya, kode Python berikut menemukan semua string di mana pola pencarian terjadi tidak peduli di mana posisi string – di awal, atau di tengah, atau di akhir.

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

Outputnya adalah sebagai berikut, dan mencocokkan "Bayswater", "Table Bay", dan "Bombay" dari daftar tempat:

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

Perbandingan Multi-Baris dan Daftar

Sejauh ini perbandingan kami hanya pada beberapa kata. Menggunakan difflib modul Python juga menawarkan cara untuk membandingkan string multi-baris, dan seluruh daftar kata. Output dapat dikonfigurasi sesuai dengan berbagai format alat diff.

Contoh selanjutnya (Daftar 5) membandingkan dua string multi-baris baris demi baris, dan menampilkan penghapusan serta penambahan. Setelah inisialisasi dari Differ objek pada baris 12 perbandingan dibuat menggunakan compare() metode pada baris 15. Hasilnya dicetak pada keluaran standar:


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

Menjalankan skrip membuat output seperti yang terlihat di bawah ini. Baris dengan penghapusan ditunjukkan oleh - tanda sedangkan garis dengan tambahan dimulai dengan a + tanda. Selanjutnya, baris dengan perubahan dimulai dengan tanda tanya. Perubahan ditunjukkan menggunakan ^ tanda pada posisi yang sesuai. Garis tanpa indikator tetap sama:

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

Kesimpulan

Pada artikel ini Anda telah mempelajari berbagai cara untuk membandingkan string dengan Python. Kami harap ikhtisar ini membantu Anda memprogram secara efektif dalam kehidupan pengembang Anda.

Ucapan Terima Kasih

Penulis mengucapkan terima kasih kepada Mandy Neumeyer atas dukungannya selama mempersiapkan artikel ini.

Stempel Waktu:

Lebih dari penyalahgunaan