String İşlemlerinde Python Programları
Yayınlanan: 2022-04-26Bu öğreticide, dize işlemleri hakkında sık sorulan soruları çözmek için Python programları yazacaksınız.
Python dizelerinin palindrom mu, anagram mı olduğunu ve başlık durumunda olup olmadığını nasıl kontrol edeceğinizi öğreneceksiniz.
Python Dizeleri: Hızlı Bir İnceleme
Python'da dizeler güçlü yerleşik veri türleridir. Bir dizi karakter saklayabilirler.
Python Dizelerinde İndeksleme: Tüm Python yinelenebilirleri gibi, dizeler de sıfır indekslidir. Bu nedenle, N uzunluğundaki bir dize için geçerli dizinler 0, 1, 2'den N - 1'e kadardır.
Python ayrıca, dizenin sonundan öğelere erişmek için negatif indekslemeyi de destekler. Yani -1, dizgedeki son karakterin indeksidir, -2, dizgedeki sondan ikinci karakterin indeksidir, vb.
Python Dizelerinin Değişmezliği : Ayrıca, Python'daki dizeler değişmezdir, dolayısıyla onları yerinde değiştiremezsiniz. Bununla birlikte, üzerlerinde birkaç dize yöntemini çağırabilir ve istediğiniz sonuca sahip dizelerin kopyalarını alabilirsiniz.
Python dizilerinin temellerini gözden geçirdiğimize göre, şimdi bazı basit ama ilginç problemleri çözmeye geçelim.
Hadi başlayalım.
Python Dizesinin Palindrom olup olmadığını kontrol edin
Problem : Bir Python dizisi verildiğinde, bunun bir palindrom olup olmadığını kontrol edin.
Evet ise, True döndür; Aksi takdirde, False döndürün.
Dolayısıyla ilk problemimiz, verilen bir dizginin palindrom olup olmadığını kontrol etmektir.
Palindrom , aynı şeyi soldan sağa ve sağdan sola okuyan bir dizedir. Birkaç örnek sıralayalım: yarış arabası, referans, seviye, bayan, radar vb.
İşte bu sorunu çözmek için adımlar:
- Dizenin ters bir kopyasını alın ve gerekirse başka bir değişkende saklayın.
- Orijinal dizenin ve ters çevrilmiş dizenin değerlerini karşılaştırın.
- Eşitlerse, dize bir palindromdur. Öyleyse True döndürün ve durun.
- Orijinal ve ters kopyalar eşit değilse, dize bir palindrom değildir. Bu yüzden False döndürmeliyiz.
Anahtar işlem, dizenin ters bir kopyasını elde etmektir. Python'da bunu yapmanın birkaç farklı yolu vardır.
Ancak, iki yaklaşımı ele alacağız:
- Dize dilimlemeyi kullanma
- reversed() işlevini ve join() yöntemini kullanma
Dilimleme Kullanarak Python Dizesini Tersine Çevirme
<any_str>[start: stop: step]
sözdizimi, adım boyutu step
ile start
itibaren <any_str>
dizesinin bir dilimini döndürür, ancak stop
içermez.
-
start
atlarsanız, dilim dizenin başında başlar. -
stop
dizinini belirtmezseniz, dilim dizenin sonuna kadar uzar. - Ve
step
negatif değerleri, dizenin sonundan başlayarak dilimleri döndürmek için kullanılabilir.
Böylece <any_str>[::-1]
dizenin ters çevrilmiş bir kopyasını döndürür.
Aşağıdaki kod hücresi, is_palindrome()
işlevinin tanımını içerir.
Argüman olarak bir dize alır ve bir palindrom olup olmamasına bağlı olarak True
veya False
döndürür.
Burada, dizenin ters bir kopyasını elde etmek için dize dilimlemeyi kullandık.
def is_palindrome(this_str): rev_str = this_str[::-1] if (this_str == rev_str): return True else: return False
️ Artık işlevi tanımladığımıza göre, devam edip argüman olarak geçerli herhangi bir dizeyle çağırabiliriz.
is_palindrome("racecar") True
Yukarıdaki kod hücresinde, racecar
bir palindromdur. Böylece is_palindrome()
işlevi beklendiği gibi True
değerini döndürür.
Şimdi, işlevi river
gibi palindrom olmayan herhangi bir dizeyle çağırmayı deneyin.
is_palindrome("river") False
Ve gördüğünüz gibi, doğru olan False
değerini döndürür.
Bir Python Dizesini Reversed() ve Join() Kullanarak Tersine Çevirme
Python'da bir dizgiyi tersine çevirmek için join()
yöntemini reversed()
işleviyle birlikte kullanabilirsiniz.
-
reversed()
işlevi, dizedeki karakterler aracılığıyla bir ters yineleyici döndürür. -
join()
yöntemi daha sonra bu karakterleri ters sırayla birleştirmek için kullanılabilir.
Yukarıdaki yöntemi kullanarak is_palindrome()
işlevini aşağıdaki kod hücresindeki gibi yeniden yazabilirsiniz.
def is_palindrome(this_str): rev_str = ''.join(reversed(this_str)) if (this_str == rev_str): return True else: return False
Daha uzun bir dizi listesinden tüm palindromları toplamak için liste kavrama içindeki is_palindrome()
işlevini de kullanabilirsiniz.
str_list = ["refer","blue","level","12321","dragon"] palindromes = [string for string in str_list if is_palindrome(string)] print(palindromes) # Output ['refer', 'level', '12321']
Yukarıdaki kod şu şekilde çalışır:
-
str_list
üzerinden geçiş yapın, her dizedeis_palindrome()
çağırın. -
is_palindrome()
True
değerini döndürürse, dizeyipalindromes
listesine ekleyin.
Yukarıdaki çıktıda görebileceğiniz gibi, palindromes
str_list
içindeki tüm palindromik dizelerin bir listesidir.
İki Python Dizesinin Anagram olup olmadığını kontrol edin
Röportajlarda karşılaşabileceğiniz bir diğer popüler soru, bir çift str1
ve str2
dizisinin anagram olup olmadığını kontrol etmektir.
İki dizideki karakterlerin sayıları tamamen aynıysa, iki diziye anagram denir . Bu, diğer dizedeki karakterlere izin vererek veya yeniden düzenleyerek dizelerden birini elde edebileceğiniz anlamına gelir.
Anagram örnekleri arasında durum-tat, tasarruf-vazo, dirsek altı vb.
Python'da Sayaç Nesnesini Kullanan Anagramlar Nasıl Kontrol Edilir
Basit ve sezgisel bir yol, iki dizideki her karakterin oluşum sayısını hesaplamaktır. Ve sonra sayıların eşit olup olmadığını kontrol edin.
Bu, itertools
modülündeki Counter
nesnesi kullanılarak çok daha kolay bir şekilde yapılabilir. Counter nesnesi, karakterleri anahtar olarak ve karşılık gelen sayıları değerler olarak içeren bir Python sözlüğü döndürür.
Aşağıda gösterildiği gibi "save"
ve "vase"
dizelerini düşünün.
str1 = "save" str2 = "vase"
Burada c1
ve c2
, sırasıyla str1
ve str2
dizelerinin karakter sayılarını içeren sayaç nesneleridir.
from collections import Counter c1 = Counter(str1) c2 = Counter(str2) print(c1) print(c2) c1 == c2 # Output Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1}) Counter({'v': 1, 'a': 1, 's': 1, 'e': 1}) True
c1 == c2
, str1
ve str2
anagram olduğundan True
değerini döndürür.
Bu mantığı kullanarak, şimdi devam are_anagrams()
fonksiyonunu word1
ve word2
olmak üzere iki parametre ile tanımlayabiliriz. Fonksiyon gövdesinde Counter(word1) == Counter(word2)
olup olmadığını kontrol ederiz.
def are_anagrams(word1, word2): if Counter(word1) == Counter(word2): return True else: return False
️ Doğrulamak str2
str1
are_anagrams()
çağırın. str1
ve str2
anagramlar (“kaydet” ve “vazo”) olduğundan, işlev doğru olan True
değerini döndürür.
are_anagrams(str1, str2) True
Dizelerin Sıralanmış Kopyalarını Kullanarak Anagramları Kontrol Etme
Bunu yapmanın başka bir yolu var.
İki dize anagram ise, sıralanmış kopyaları eşittir.
Böylece, str2
sıralanmış sürümünün str1
sıralanmış kopyasıyla aynı olup olmadığını kontrol etmek için are_anagrams()
işlevini yeniden yazabiliriz. Eşitlerse, iki dizi anagramdır; yoksa değiller.
Sıralanan kopyaların eşitliğini kontrol etmek için yukarıdaki yöntemi kullanarak, are_anagrams()
fonksiyonunu aşağıdaki gibi yeniden yazabiliriz.
def are_anagrams(word1, word2): if sorted(word1) == sorted(word2): return True else: return False
Şimdi birkaç fonksiyon çağrısı yapalım.
- "Dirsek" ve "aşağıda" dizeleri anagramlardır ve
are_anagrams()
işleviTrue
değerini döndürür. - Ve "durum" ve "tadı" anagram değildir ve işlev
False
değerini döndürür.
are_anagrams("below","elbow") True are_anagrams("state","tasted") False
Bir Python Dizesinin Başlık Durumunda olup olmadığını kontrol edin
İşte bu eğitim için son sorumuz.
Sorun : Bir dize verildi: bir kişinin adı—ad ve soyadıyla birlikte.
Hem adın hem de soyadının ilk harfinin büyük olup olmadığını kontrol etmelisiniz.
Her kelimenin ilk harfinin büyük olduğu bu tip büyük harfe başlık durumu denir.
Bu nedenle, adın başlık durumunda olup olmadığını kontrol etmelisiniz:
1. Evet ise, biçimlendirmenin başlık durumunda olduğuna dair bir mesaj çıktısı alın.
2. Aksi takdirde, başlık dosyasında biçimlendirilmiş dizenin bir kopyasını döndürün
- Python, bir dizgenin başlık durumunda olup olmadığını kontrol eden yerleşik bir
istitle()
yöntemine sahiptir.
<str>.istitle()
,<str>
dizesi başlık durumunda biçimlendirilmişseTrue
döndürür, aksi takdirdeFalse
döndürür.
- Ve Python'un string yöntemi
title()
, başlık durumunda biçimlendirilmiş dizenin bir kopyasını döndürür.
Şimdi sorunu çözmek için bu iki yöntemi kullanabilirsiniz.
Argüman olarak name
kabul eden bir check_titlecase()
işlevi tanımlayın.
- Başlık durumunda biçimlendirilip biçimlendirilmediğini kontrol etmek için giriş dizesindeki
istitle()
yöntemini çağırabilirsiniz. -
True
ise, dizenin zaten başlık durumunda olduğunu yazdırabilirsiniz. - Aksi takdirde,
title()
yöntemini çağırabilir ve başlık durumunda dizenin bir kopyasını döndürebilirsiniz.
Aşağıdaki kod hücresi, check_titlecase()
işlevinin tanımını gösterir.
def check_titlecase(name): if name.istitle(): print(f"'{name}' is already formatted in title case.") else: return name.title()
Şimdi bir argümanla check_titlecase()
yöntemini çağıralım.
check_titlecase("jane smith") # Output Jane Smith
Yukarıdaki çıktıda, “Jane Smith” dizesinin artık başlık durumunda olduğunu görebilirsiniz.
️ Bir örnek daha verelim.
check_titlecase("agatha Christie") # Output Agatha Christie
Bu sefer, işlevi başlık-büyük harfli bir dizge ile çağıralım.
check_titlecase("Grace Hopper") # Output 'Grace Hopper' is already formatted in title case.
Dizenin başlık durumunda biçimlendirildiği ve işlevin beklendiği gibi çalıştığı konusunda bilgilendiriliriz.
Çözüm
Şimdi buraya kadar tartıştığımız sorunları özetleyelim.
- Bir dizginin palindrom olup olmadığını kontrol etmek için dizginin ve onun ters çevrilmiş versiyonunun eşit olup olmadığını kontrol edin. Dizeleri tersine çevirmek için dize dilimleme veya yerleşik yöntemleri kullanabilirsiniz.
- İki dizenin anagram olup olmadığını kontrol etmek için sıralanmış kopyalarının eşit olup olmadığını kontrol edin. Ve bir dizgiyi sıralamak için yerleşik sort () işlevini kullanın.
- Bir adın büyük/küçük harf olup olmadığını doğrulamak için, kontrol için .istitle() yöntemini ve dizenin başlık-büyük harfli bir kopyasını elde etmek için .title() yöntemini kullanın.
Umarım Python dizeleriyle ilgili bu öğreticiyi beğenmişsinizdir. Bir sonraki adım olarak, Python'da liste kavrayışlarının nasıl kullanılacağını veya Python'da eşit olmayan operatör hakkında bilgi edinin.
Mutlu öğrenme ve kodlama!