Bir metnin bir dize içinde var olup olmadığını kontrol etmek için .find() veya .index() kullanmak yaygındır—ve ardından bir ValueError ya da dizenin başındaki bir eşleşmenin kaçırılması gibi garip davranışlarla karşılaşılır. Büyük/küçük harf duyarlılığı, bir farkla kaçan dilim sınırları ve str üzerinde bir .contains() yönteminin olmaması kafa karışıklığını artırır. Çözüm basittir: işe uygun aracı kullanın. Varlık kontrolleri için in işleçine, konumlar için .find()/.index()’e, sayımlar için .count()’a ve ikameler için .replace()’e güveniriz—ayrıca büyük/küçük harf duyarsızlığı önemli olduğunda birkaç Unicode güvenli tekniğe başvururuz.
Python Alt Dize Aramasını Nasıl Ele Alır
Python’un metin dizeleri Unicode’dur. Alt dize işlemleri varsayılan olarak büyük/küçük harfe duyarlıdır ve hız için C’de uygulanmıştır. Bir metnin bir dize içinde görünüp görünmediğini test etmenin en doğrudan yolu, dizenin __contains__() uygulamasını kullanan bir Boolean döndüren in işleçidir. Konumlara veya sayılara ihtiyaç duyduğunuzda özel str yöntemlerini kullanın. İsteğe bağlı start ve end parametreleri dilim semantiğini izler: başlangıç dahil; bitiş hariçtir.
in ile kapsama
Yalnızca alt dizenin var olup olmadığına önem veriyorsanız "needle" in haystack kullanın. Okunabilir ve indeks işlemeyi önler.
text ="Banana bread"print("ban"in text)# False (case-sensitive)print("Ban"in text)# TrueAltyapı:
Büyük/küçük harf duyarsız kontroller için, her iki tarafı da normalize edin. .casefold(), .lower()’dan daha Unicode farkındadır ve benim harf duyarsız eşleştirme için varsayılan tercihimdir.
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 houseAltyapı:
Büyük/küçük harf duyarsız değiştirme
Büyük/küçük harf duyarsız değiştirmelerde, harf desenlerini korumak istiyorsanız re.IGNORECASE ile re.sub() kullanın; orijinal büyük/küçük harfi korumanız gerekmiyorsa .casefold() ile normalize edin.
.casefold() ile Büyük/Küçük Harf Duyarsız Eşleştirme
.casefold(), agresif, Unicode farkındalığı olan bir harf normalleştirme sağlar ve harf duyarsız kontroller için .lower() yerine tercih edilir.
query ="straße"# German 'straße'
text ="STRASSE und mehr"# Uppercase variantprint(query.casefold()in text.casefold())# TrueAltyapı:
Ön Ek ve Son Ekler İçin İlgili Araçlar
Bilinen başlangıç/bitişler için özel yöntemleri kullanın—dilimlemeden veya regex’ten daha hızlı ve daha nettirler:
s.startswith(prefix) ve s.endswith(suffix) (birden çok seçenek için demet kabul eder)
s.removeprefix(prefix) ve s.removesuffix(suffix) (Python 3.9+)
Bitiş hariçtir; bu nedenle arama konumları dilim semantiğini yansıtır.
headline ="Where's Waldo?"print(headline.find("Waldo",0,6))# -1 (searching "Where'")print(headline.find("Waldo",0,13))# 8 (searching up to the 'o' in Waldo)Altyapı:
Bu örnek bir film kısa açıklamaları listesini işler. Varlık kontrollerini, sınırlı aramaları ve regex olmadan güvenli değiştirmeleri gösterir.
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)Altyapı:
Çıktı:
Window check: actor not found
Fans argue the actor scene was intentionally repetitive.
Window check: actor not foundAltyapı:
Sonuç
in işleçini basit kapsama için, konumlara ihtiyaç duyduğunuzda .find() veya .index()’i, çakışmayan sayımlar için .count()’u ve ikameler için .replace()’i kullanın. Büyük/küçük harf duyarsız kontroller için .casefold() ile normalize edin ve uygun olduğunda özel ön ek/son ek yardımcılarını tercih edin. Dize kodunun doğru ve net kalması için .find() sonuçlarını Boolean’a dönüştürmekten kaçınır ve boş alt dize davranışını özel bir durum olarak ele alırız.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bir metnin bir dize içinde var olup olmadığını kontrol etmek için
.find()veya.index()kullanmak yaygındır—ve ardından birValueErrorya da dizenin başındaki bir eşleşmenin kaçırılması gibi garip davranışlarla karşılaşılır. Büyük/küçük harf duyarlılığı, bir farkla kaçan dilim sınırları vestrüzerinde bir.contains()yönteminin olmaması kafa karışıklığını artırır. Çözüm basittir: işe uygun aracı kullanın. Varlık kontrolleri içininişleçine, konumlar için.find()/.index()’e, sayımlar için.count()’a ve ikameler için.replace()’e güveniriz—ayrıca büyük/küçük harf duyarsızlığı önemli olduğunda birkaç Unicode güvenli tekniğe başvururuz.Python Alt Dize Aramasını Nasıl Ele Alır
Python’un metin dizeleri Unicode’dur. Alt dize işlemleri varsayılan olarak büyük/küçük harfe duyarlıdır ve hız için C’de uygulanmıştır. Bir metnin bir dize içinde görünüp görünmediğini test etmenin en doğrudan yolu, dizenin
__contains__()uygulamasını kullanan bir Boolean döndüreninişleçidir. Konumlara veya sayılara ihtiyaç duyduğunuzda özelstryöntemlerini kullanın. İsteğe bağlıstartveendparametreleri dilim semantiğini izler: başlangıç dahil; bitiş hariçtir.in ile kapsama
Yalnızca alt dizenin var olup olmadığına önem veriyorsanız
"needle" in haystackkullanın. Okunabilir ve indeks işlemeyi önler.Büyük/küçük harf duyarsız kontroller için, her iki tarafı da normalize edin.
.casefold(),.lower()’dan daha Unicode farkındadır ve benim harf duyarsız eşleştirme için varsayılan tercihimdir."" in sher zamanTrue’dur (boş dize her dizenin içindedir).str.find() yöntemi
Sözdizimi
str.find(), alt dizenin en düşük indeksini döndürür; bulunamazsa-1döndürür. İsteğe bağlıstartveendaramayı sınırlar.Örnekler ve kullanım alanları
Konuma ihtiyaç duyduğunuzda ve “bulunamadı” değerini istisna olmadan ele alabileceğiniz durumlarda
.find()kullanın.Varlık kontrolü için
if s.find(sub):yazmayın. Eşleşme indeks 0’daysa, koşul falsey olur.str.index() yöntemi
Sözdizimi
.index(),.find()ile aynıdır ancak alt dize yoksaValueErrorfırlatır.Örnekler ve ne zaman seçilmeli
Alt dizenin mutlaka var olması gerektiğinde ve doğru hata modu bir istisna olduğunda
.index()kullanın.str.count() yöntemi
Sözdizimi
.count(), çakışmayan yinelemelerin sayısını döndürür.startveendsınırlarını da kabul eder.Örnekler ve uç durumlar
Regex olmadan hızlı sayımlar için
.count()kullanın.Özel durum: boş dize.
str.replace() yöntemi
.replace(),oldoluşumlarınınnewile değiştirildiği yeni bir dize döndürür. Değiştirmeleri sınırlamak içincountkullanın.Alt dizeleri değiştirme
Yöntem yerinde çalışmaz; bir kopya döndürür.
Büyük/küçük harf duyarsız değiştirme
Büyük/küçük harf duyarsız değiştirmelerde, harf desenlerini korumak istiyorsanız
re.IGNORECASEilere.sub()kullanın; orijinal büyük/küçük harfi korumanız gerekmiyorsa.casefold()ile normalize edin..casefold() ile Büyük/Küçük Harf Duyarsız Eşleştirme
.casefold(), agresif, Unicode farkındalığı olan bir harf normalleştirme sağlar ve harf duyarsız kontroller için.lower()yerine tercih edilir.Ön Ek ve Son Ekler İçin İlgili Araçlar
Bilinen başlangıç/bitişler için özel yöntemleri kullanın—dilimlemeden veya regex’ten daha hızlı ve daha nettirler:
s.startswith(prefix)ves.endswith(suffix)(birden çok seçenek için demet kabul eder)s.removeprefix(prefix)ves.removesuffix(suffix)(Python 3.9+)Pandas Sütunlarıyla Çalışma
Bir DataFrame sütununda çok sayıda dize ararken vektörleşmiş dize yöntemlerini kullanın. Salt metin eşleştirmek için
regex=Falseayarlayın.Notlar:
regex=True’dir; bu nedenle.gibi özel karakterler, regex’i devre dışı bırakmadığınız sürece herhangi bir karakterle eşleşir.na=...ile yönetin.StringDtypeile, eksik değerler maskede varsayılan olarakFalseolur.Yaygın Tuzaklar ve Uç Durumlar
str üzerinde .contains() yok:
"sub" in skullanın."abc".contains("a")AttributeErroryükseltir..find()’in doğruluk değeri: indeks
0falsey’dir;!= -1ile karşılaştırın ya da varlık içinin’i tercih edin..index() istisna fırlatır: alt dize yok olabilir ise
ValueError’ı yönetin.Boş alt dize:
"" in sTrue’dur;s.find("")0döndürür;s.count("")len(s)+1’dir.Büyük/küçük harf duyarlılığı: siz normalize etmedikçe veya regex bayrakları kullanmadıkça tüm işlemler büyük/küçük harfe duyarlıdır.
Bayt vs. metin: aramalarda
bytesvestr’ı karıştırmayın; türleri eşlemek için decode veya encode edin.Alt dize semantiği:
"ab" in "cat,bat"False’tur;"a"ve"b"ayrı ayrı görünse bile—eşleşmeler bitişik olmalıdır.Çalıştırabileceğiniz Uygulamalı Örnekler
Bu kısa parçalar doğru kalıpları gösterir ve yaygın tuzakları vurgular.
Varlık kontrolleri
start ve end ile sınırlı arama
Bitiş hariçtir; bu nedenle arama konumları dilim semantiğini yansıtır.
Sayma ve değiştirme
Python Dizede Arama ve Değiştirme Uygulama Örneği
Bu örnek bir film kısa açıklamaları listesini işler. Varlık kontrollerini, sınırlı aramaları ve regex olmadan güvenli değiştirmeleri gösterir.
Çıktı:
Sonuç
inişleçini basit kapsama için, konumlara ihtiyaç duyduğunuzda.find()veya.index()’i, çakışmayan sayımlar için.count()’u ve ikameler için.replace()’i kullanın. Büyük/küçük harf duyarsız kontroller için.casefold()ile normalize edin ve uygun olduğunda özel ön ek/son ek yardımcılarını tercih edin. Dize kodunun doğru ve net kalması için.find()sonuçlarını Boolean’a dönüştürmekten kaçınır ve boş alt dize davranışını özel bir durum olarak ele alırız.