Kita sering menggunakan .find() atau .index() untuk memeriksa apakah sebuah teks ada di dalam string—lalu menemui perilaku aneh seperti ValueError atau kecocokan yang terlewat di awal string. Sensitivitas huruf besar/kecil, batas irisan yang meleset satu, dan fakta bahwa tidak ada metode .contains() pada str menambah kebingungan. Solusinya sederhana: gunakan alat yang tepat untuk tugasnya. Andalkan operator in untuk pemeriksaan keberadaan, .find()/.index() untuk posisi, .count() untuk hitungan, dan .replace() untuk penggantian—ditambah beberapa teknik yang aman untuk Unicode saat ketidakpekaan huruf besar/kecil penting.
Cara Python Menangani Pencarian Substring
String teks Python adalah Unicode. Operasi substring peka huruf besar/kecil secara bawaan dan diimplementasikan dalam C demi kecepatan. Cara paling langsung untuk menguji apakah teks muncul di dalam sebuah string adalah operator in, yang mengembalikan Boolean menggunakan implementasi __contains__() milik string. Saat Anda membutuhkan posisi atau jumlah, gunakan metode str khusus. Parameter opsional start dan end mengikuti semantik slicing: start inklusif; end eksklusif.
Pemeriksaan keberadaan dengan in
Gunakan "needle" in haystack ketika Anda hanya peduli apakah substring tersebut ada. Cara ini mudah dibaca dan menghindari penanganan indeks.
text ="Banana bread"print("ban"in text)# False (case-sensitive)print("Ban"in text)# TrueDidukung oleh
Untuk pemeriksaan yang tidak peka huruf besar/kecil, normalisasi kedua sisi. .casefold() lebih sadar Unicode daripada .lower() dan menjadi pilihan utama saya untuk pencocokan tanpa peka huruf.
pattern ="ban"print(pattern.casefold()in text.casefold())# TrueDidukung oleh
Metodenya tidak in-place; ia mengembalikan salinan.
message ="The red house is between the blue house and the old house"print(message.replace("house","car"))# The red car is between the blue car and the old carprint(message.replace("house","car",2))# The red car is between the blue car and the old houseDidukung oleh
Penggantian tidak peka huruf besar/kecil
Untuk penggantian yang tidak peka huruf besar/kecil sambil mempertahankan pola huruf, gunakan re.sub() dengan re.IGNORECASE, atau normalisasi dengan .casefold() jika Anda tidak perlu mempertahankan kapitalisasi asli.
Pencocokan Tidak Peka Huruf dengan .casefold()
.casefold() menyediakan normalisasi huruf yang agresif dan sadar Unicode, serta lebih disukai daripada .lower() untuk pemeriksaan tanpa peka huruf.
query ="straße"# German 'straße'
text ="STRASSE und mehr"# Uppercase variantprint(query.casefold()in text.casefold())# TrueDidukung oleh
Alat Terkait untuk Prefiks dan Sufiks
Untuk awalan/akhiran yang sudah diketahui, gunakan metode khusus—lebih cepat dan lebih jelas daripada slicing atau regex:
s.startswith(prefix) dan s.endswith(suffix) (menerima tuple untuk beberapa opsi)
s.removeprefix(prefix) dan s.removesuffix(suffix) (Python 3.9+)
filename ="draft_report_v2.pdf"print(filename.removeprefix("draft_"))# report_v2.pdfprint(filename.endswith((".pdf",".docx")))# TrueDidukung oleh
Bekerja dengan Kolom Pandas
Saat mencari banyak string dalam kolom DataFrame, gunakan metode string tervektorisasi. Atur regex=False untuk mencocokkan teks literal.
import pandas as pd
cities = pd.Series(["New York","Yorktown",None,"Toronto"], dtype="string")
mask = cities.str.contains("York", regex=False, na=False)print(mask.tolist())# [True, True, False, False]Didukung oleh
Catatan:
Secara bawaan, regex=True, sehingga karakter khusus seperti . mencocokkan karakter apa pun kecuali Anda menonaktifkan regex.
Tangani null melalui na=.... Dengan StringDtype, nilai yang hilang menjadi False secara bawaan pada mask.
Jebakan Umum dan Kasus Tepi
Tidak ada .contains() pada str: gunakan "sub" in s. "abc".contains("a") memunculkan AttributeError.
Truthiness .find(): indeks 0 bernilai falsey; bandingkan dengan != -1 atau lebih suka gunakan in untuk keberadaan.
.index() memunculkan pengecualian: tangani ValueError jika substring mungkin tidak ada.
Substring kosong:"" in s adalah True; s.find("") mengembalikan 0; s.count("") adalah len(s)+1.
Sensitivitas huruf: semua operasi peka huruf besar/kecil kecuali Anda melakukan normalisasi atau menggunakan flag regex.
Bytes vs. teks: jangan mencampur bytes dan str dalam pencarian; decode atau encode agar tipenya cocok.
Semantik substring:"ab" in "cat,bat" adalah False meskipun "a" dan "b" muncul terpisah—kecocokan harus berdekatan.
Contoh Praktik yang Bisa Anda Jalankan
Cuplikan singkat ini menunjukkan pola yang benar dan menyoroti hal-hal yang sering menjebak.
Pemeriksaan keberadaan
headline ="Where's Waldo?"print("Waldo"in headline)# Trueprint("Wenda"in headline)# Falseprint(headline.find("Waldo"))# 8print(headline.find("Wenda"))# -1Didukung oleh
Pencarian berbatas dengan start dan end
End bersifat eksklusif, sehingga posisi pencarian mencerminkan semantik slicing.
headline ="Where's Waldo?"print(headline.find("Waldo",0,6))# -1 (mencari pada "Where'")print(headline.find("Waldo",0,13))# 8 (mencari hingga huruf 'o' pada Waldo)Didukung oleh
Contoh Latihan Pencarian dan Penggantian String di Python
Contoh ini memproses daftar blurb film. Ini menunjukkan pemeriksaan keberadaan, pencarian berbatas, dan penggantian yang aman tanpa regex.
blurbs =["Critics say the lead actor delivers a career-best performance.","Fans argue the actor actor scene was intentionally repetitive.","A clever cameo steals the show."]for blurb in blurbs:# Check whether "actor" appears between indexes 20 and 40 (end exclusive).
window_has_actor ="actor".casefold()in blurb[20:40].casefold()ifnot window_has_actor:print("Window check: actor not found")continue# If "actor actor" appears, collapse to a single "actor".if"actor actor"in blurb:print(blurb.replace("actor actor","actor"))# If "actor actor actor" appears, collapse to a single "actor".elif"actor actor actor"in blurb:print(blurb.replace("actor actor actor","actor"))else:print(blurb)Didukung oleh
Keluaran:
Window check: actor not found
Fans argue the actor scene was intentionally repetitive.
Window check: actor not foundDidukung oleh
Kesimpulan
Gunakan operator in untuk pemeriksaan keterdapatan sederhana, .find() atau .index() saat Anda membutuhkan posisi, .count() untuk hitungan tanpa tumpang tindih, dan .replace() untuk penggantian. Lakukan normalisasi dengan .casefold() untuk pemeriksaan yang tidak peka huruf, dan pilih pembantu awalan/akhiran khusus bila sesuai. Kita menghindari mengonversi hasil .find() menjadi Boolean dan memperlakukan perilaku substring kosong sebagai kasus khusus agar kode string tetap benar dan jelas.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Selami ilmu data dengan Python dan pelajari cara menganalisis serta memvisualisasikan data Anda secara efektif. Tak perlu pengalaman atau keterampilan coding.
Kita sering menggunakan
.find()atau.index()untuk memeriksa apakah sebuah teks ada di dalam string—lalu menemui perilaku aneh sepertiValueErroratau kecocokan yang terlewat di awal string. Sensitivitas huruf besar/kecil, batas irisan yang meleset satu, dan fakta bahwa tidak ada metode.contains()padastrmenambah kebingungan. Solusinya sederhana: gunakan alat yang tepat untuk tugasnya. Andalkan operatorinuntuk pemeriksaan keberadaan,.find()/.index()untuk posisi,.count()untuk hitungan, dan.replace()untuk penggantian—ditambah beberapa teknik yang aman untuk Unicode saat ketidakpekaan huruf besar/kecil penting.Cara Python Menangani Pencarian Substring
String teks Python adalah Unicode. Operasi substring peka huruf besar/kecil secara bawaan dan diimplementasikan dalam C demi kecepatan. Cara paling langsung untuk menguji apakah teks muncul di dalam sebuah string adalah operator
in, yang mengembalikan Boolean menggunakan implementasi__contains__()milik string. Saat Anda membutuhkan posisi atau jumlah, gunakan metodestrkhusus. Parameter opsionalstartdanendmengikuti semantik slicing: start inklusif; end eksklusif.Pemeriksaan keberadaan dengan in
Gunakan
"needle" in haystackketika Anda hanya peduli apakah substring tersebut ada. Cara ini mudah dibaca dan menghindari penanganan indeks.Untuk pemeriksaan yang tidak peka huruf besar/kecil, normalisasi kedua sisi.
.casefold()lebih sadar Unicode daripada.lower()dan menjadi pilihan utama saya untuk pencocokan tanpa peka huruf."" in sselaluTrue(string kosong ada di setiap string).Metode str.find()
Sintaks
str.find()mengembalikan indeks terendah dari substring, atau-1jika tidak ditemukan. Parameter opsionalstartdanendmembatasi pencarian.Contoh dan kasus penggunaan
Gunakan
.find()ketika Anda memerlukan posisi dan bisa menangani nilai “tidak ditemukan” tanpa pengecualian.Jangan menulis
if s.find(sub):untuk memeriksa keberadaan. Jika kecocokan ada di indeks 0, kondisinya bernilai falsey.Metode str.index()
Sintaks
.index()mencerminkan.find()tetapi akan memunculkanValueErrorketika substring tidak ada.Contoh dan kapan memilihnya
Gunakan
.index()ketika substring harus ada dan pengecualian adalah mode kegagalan yang tepat.Metode str.count()
Sintaks
.count()mengembalikan jumlah kemunculan yang tidak saling tumpang tindih. Metode ini juga menerima batasstartdanend.Contoh dan kasus tepi
Gunakan
.count()untuk menghitung cepat tanpa regex.Kasus khusus: string kosong.
Metode str.replace()
.replace()mengembalikan string baru di mana kemunculanolddiganti dengannew. Gunakancountuntuk membatasi jumlah penggantian.Mengganti substring
Metodenya tidak in-place; ia mengembalikan salinan.
Penggantian tidak peka huruf besar/kecil
Untuk penggantian yang tidak peka huruf besar/kecil sambil mempertahankan pola huruf, gunakan
re.sub()denganre.IGNORECASE, atau normalisasi dengan.casefold()jika Anda tidak perlu mempertahankan kapitalisasi asli.Pencocokan Tidak Peka Huruf dengan .casefold()
.casefold()menyediakan normalisasi huruf yang agresif dan sadar Unicode, serta lebih disukai daripada.lower()untuk pemeriksaan tanpa peka huruf.Alat Terkait untuk Prefiks dan Sufiks
Untuk awalan/akhiran yang sudah diketahui, gunakan metode khusus—lebih cepat dan lebih jelas daripada slicing atau regex:
s.startswith(prefix)dans.endswith(suffix)(menerima tuple untuk beberapa opsi)s.removeprefix(prefix)dans.removesuffix(suffix)(Python 3.9+)Bekerja dengan Kolom Pandas
Saat mencari banyak string dalam kolom DataFrame, gunakan metode string tervektorisasi. Atur
regex=Falseuntuk mencocokkan teks literal.Catatan:
regex=True, sehingga karakter khusus seperti.mencocokkan karakter apa pun kecuali Anda menonaktifkan regex.na=.... DenganStringDtype, nilai yang hilang menjadiFalsesecara bawaan pada mask.Jebakan Umum dan Kasus Tepi
Tidak ada .contains() pada str: gunakan
"sub" in s."abc".contains("a")memunculkanAttributeError.Truthiness .find(): indeks
0bernilai falsey; bandingkan dengan!= -1atau lebih suka gunakaninuntuk keberadaan..index() memunculkan pengecualian: tangani
ValueErrorjika substring mungkin tidak ada.Substring kosong:
"" in sadalahTrue;s.find("")mengembalikan0;s.count("")adalahlen(s)+1.Sensitivitas huruf: semua operasi peka huruf besar/kecil kecuali Anda melakukan normalisasi atau menggunakan flag regex.
Bytes vs. teks: jangan mencampur
bytesdanstrdalam pencarian; decode atau encode agar tipenya cocok.Semantik substring:
"ab" in "cat,bat"adalahFalsemeskipun"a"dan"b"muncul terpisah—kecocokan harus berdekatan.Contoh Praktik yang Bisa Anda Jalankan
Cuplikan singkat ini menunjukkan pola yang benar dan menyoroti hal-hal yang sering menjebak.
Pemeriksaan keberadaan
Pencarian berbatas dengan start dan end
End bersifat eksklusif, sehingga posisi pencarian mencerminkan semantik slicing.
Menghitung dan mengganti
Contoh Latihan Pencarian dan Penggantian String di Python
Contoh ini memproses daftar blurb film. Ini menunjukkan pemeriksaan keberadaan, pencarian berbatas, dan penggantian yang aman tanpa regex.
Keluaran:
Kesimpulan
Gunakan operator
inuntuk pemeriksaan keterdapatan sederhana,.find()atau.index()saat Anda membutuhkan posisi,.count()untuk hitungan tanpa tumpang tindih, dan.replace()untuk penggantian. Lakukan normalisasi dengan.casefold()untuk pemeriksaan yang tidak peka huruf, dan pilih pembantu awalan/akhiran khusus bila sesuai. Kita menghindari mengonversi hasil.find()menjadi Boolean dan memperlakukan perilaku substring kosong sebagai kasus khusus agar kode string tetap benar dan jelas.