String İşlemlerinde Python Programları

Yayınlanan: 2022-04-26

Bu öğ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.

piton-dizeleri

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.

piton-string-palindrom

İş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 dizede is_palindrome() çağırın.
  • is_palindrome() True değerini döndürürse, dizeyi palindromes 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.

piton-dizeleri-anagramlar

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şlevi True 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-string-title-case
  • 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şse True döndürür, aksi takdirde False 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!