0Pricing
Coding Interview Prep · Ders

Mülakatlar için Python Dize API’si

Ayrıştırma ve dönüştürme içeren mülakat problemlerinde görülen split, join, replace, find, ord/chr ve dize biçimlendirme kalıpları üzerinde çalışın.

Mülakatlar için Python Dize API’si, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

Python'da Dizeler Değişmezdir

Python dizeleri değişmezdir; bir karakteri yerinde değiştiremezsiniz. Bir dizeyi değiştiriyormuş gibi görünen her dize işlemi aslında yeni bir dize oluşturur. Bu nedenle s[0] = 'X' bir TypeError oluşturur. Yerinde değişiklik yapmanız gerektiğinde önce karakterlerden oluşan bir listeye dönüştürün, işleminizi yapın ve ardından yeniden oluşturmak için ''.join(chars) kullanın. Bu, dize değiştirme problemlerinde standart mülakat örüntüsüdür.

s = 'hello'
# s[0] = 'H'  # TypeError!

# In-place mutation pattern:
chars = list(s)
chars[0] = 'H'
result = ''.join(chars)
print(result)  # 'Hello'

# Reversing a string
print(s[::-1])           # 'olleh'
print(''.join(reversed(s)))  # 'olleh'

split() ve join(): Ayrıştırma ve Oluşturma

s.split(sep), bir dizeyi ayraç üzerinde böler ve alt dizelerden oluşan bir liste döndürür. sep=None (varsayılan), dizeyi herhangi bir boşluk karakterinde böler ve boş dizeleri atar; bu, boşluklarla ayrılmış girdileri ayrıştırmak için idealdir. 'sep'.join(iterable), dizeleri aralarına ayraç koyarak birleştirir. ' '.join(words) deyimi, bir listeden boşluklarla ayrılmış dize oluşturmanın verimli yoludur; döngü içinde asla + kullanmayın.

# split
sentence = '  hello   world  '
words = sentence.split()    # ['hello', 'world']
print(words)

csv = 'a,b,c,d'
parts = csv.split(',')      # ['a', 'b', 'c', 'd']
print(parts)

# join
print(' '.join(words))      # 'hello world'
print(','.join(['x','y','z']))  # 'x,y,z'

# Reverse words in a sentence
print(' '.join(sentence.split()[::-1]))  # 'world hello'

find(), index() ve in

s.find(sub), sub öğesinin ilk görüldüğü dizini döndürür; bulunamazsa -1 döndürür. s.index(sub) de aynı işlemi yapar, ancak öğe yoksa ValueError oluşturur. İşlenmemiş istisnaları önlemek için mülakat kodunda find kullanmayı tercih edin. Dizeler için in işleci, find ile aynı olan O(n×m) zamanlı alt dize aramasıdır. Kopyalama yapmadan bir dilim içinde arama yapmak için isteğe bağlı start ve end parametrelerini kullanın.

s = 'abcabcabc'
print(s.find('bc'))          # 1  (first occurrence)
print(s.find('bc', 2))       # 4  (search from index 2)
print(s.find('xyz'))         # -1 (not found)
print('abc' in s)            # True

# Count occurrences manually
count = 0
start = 0
while True:
    idx = s.find('bc', start)
    if idx == -1: break
    count += 1
    start = idx + 1
print(count)  # 3

replace(), strip() ve Büyük-Küçük Harf Yöntemleri

s.replace(old, new, count=-1), tüm görülenleri (veya ilk count görüleni) değiştirilmiş yeni bir dize döndürür. s.strip(), baştaki ve sondaki boşluk karakterlerini (veya belirtilen karakterleri) kaldırır. lower(), upper(), capitalize() ve swapcase() büyük-küçük harf yöntemleri yeni dizeler oluşturur; döndürülen değerleri kullanmayı unutmayın, bu yöntemler dizeleri değiştirmez. Büyük-küçük harfe duyarsız problemlerde karşılaştırmadan önce harf durumunu normalleştirmek çok önemlidir.

s = '  Hello, World!  '
print(s.strip())          # 'Hello, World!'
print(s.strip().lower())  # 'hello, world!'

print('banana'.replace('a', 'o'))   # 'bonono'
print('banana'.replace('a', 'o', 2)) # 'bonona'

# Normalise for comparison
def same_ignoring_case(a, b):
    return a.lower() == b.lower()

print(same_ignoring_case('Racecar', 'racecar'))  # True

startswith(), endswith() ve isalnum()

Koşul bildiren dize yöntemleri doğru/yanlış değeri döndürür ve k desen uzunluğu olduğunda O(k) zamanda çalışır. s.startswith(prefix) ve s.endswith(suffix), birden çok seçenek için demetleri kabul eder. s.isalpha(), s.isdigit(), s.isalnum() ve s.isspace() karakter sınıflarını sınar. Bunlar geçerli palindrom, geçerli sayı ve URL ayrıştırma mülakat problemlerinde kullanılır.

print('hello'.startswith('hel'))   # True
print('hello'.endswith(('lo', 'la')))  # True

# isalnum for palindrome filtering
def clean(s):
    return ''.join(c.lower() for c in s if c.isalnum())

print(clean('A man, a plan, a canal: Panama'))
# 'amanaplanacanalpanama'
print(clean('123abc!@#'))
# '123abc'

ord(), chr() ve ASCII Aritmetiği

ord(c), c karakterinin Unicode kod noktasını döndürür. chr(n), bir tamsayıyı yeniden karaktere dönüştürür. Küçük harfler için ord(c) - ord('a') ifadesi 0-25 aralığında bir değer verir. Bu, İngiliz alfabeti için bir karma tabloya gerek kalmadan sabit boyutlu 26 elemanlı sıklık dizileri oluşturmanın temiz bir yoludur ve pratikte daha hızlıdır. Bu teknik anagram ve palindrom problemlerinde görülür.

print(ord('a'))   # 97
print(ord('z'))   # 122
print(chr(65))    # 'A'

# Frequency array for lowercase letters
def char_freq(s):
    freq = [0] * 26
    for c in s:
        freq[ord(c) - ord('a')] += 1
    return freq

print(char_freq('anagram'))  # [3,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0]
# index 0='a'(3), 6='g'(1), 12='m'(1), 17='r'(1)

Çıktı için Dize Biçimlendirme

Kodlama mülakatlarında temiz çıktı bazen önemlidir. Python üç biçimlendirme stili sunar: %-biçimlendirme (eski), .format() (klasik) ve f dizeleri (modern ve tercih edilen). F dizeleri en okunabilir seçenektir ve ifadeleri doğrudan destekler: f'{value:.2f}', bir kayan noktalı sayıyı 2 ondalık basamağa biçimlendirir. Sayıları biçimlendirmeyi, dizelere dolgu eklemeyi ve tabloları hızlıca yazdırmayı bilmek, baskı altında hata ayıklama süresini azaltır.

name = 'Alice'
score = 95.678

# f-string (preferred in interviews)
print(f'{name}: {score:.1f}')      # Alice: 95.7
print(f'{name:>10}: {score:05.1f}') # right-align

# Zero-pad an integer
print(f'{42:04d}')   # 0042

# Join and format a list
nums = [1, 2, 3, 4]
print(', '.join(str(n) for n in nums))  # '1, 2, 3, 4'

join() ile Verimli Dize Oluşturma

Döngü içinde + ile dize birleştirmek her yinelemede yeni bir dize oluşturur ve n karakter için toplam O(n²) maliyete yol açar. Doğru örüntü şudur: parçaları bir listeye append ile ekleyin ve sonunda ''.join(parts) çağrısı yapın; bu işlem O(n) zamanda çalışır. Bu, Python'daki en yaygın performans karşıt örüntülerinden biridir. Bir mülakatta bu ödünleşimden söz etmeniz, Python'un bellek modelini anladığınızı gösterir.

# SLOW: O(n^2) due to repeated string allocation
def build_bad(chars):
    s = ''
    for c in chars:
        s += c  # creates a new string each time!
    return s

# FAST: O(n)
def build_good(chars):
    parts = []
    for c in chars:
        parts.append(c)
    return ''.join(parts)  # single allocation

# Or even more concise:
def build_best(chars):
    return ''.join(chars)

print(build_best(['h','e','l','l','o']))  # 'hello'

Dizelerden Tamsayı ve Kayan Noktalı Sayı Ayrıştırma

Dizeler ile sayılar arasında dönüşüm yapmak, ayrıştırma problemlerinin temelidir. int(s) ve float(s) sayısal dizeleri ayrıştırır; geçersiz girdi için ValueError oluşturur. Daha güvenli ayrıştırma için try-except bloğu kullanın. isdigit() ve isnumeric() dize yöntemleri, dönüştürmeden önce ön doğrulama yapar. “atoi” (dizeden tamsayıya) gibi problemler baştaki boşlukları, işaretleri ve taşmayı ele almayı gerektirir.

def my_atoi(s):
    s = s.lstrip()  # remove leading spaces
    if not s: return 0
    sign = 1
    idx = 0
    if s[0] in '-+':
        sign = -1 if s[0] == '-' else 1
        idx = 1
    num = 0
    while idx < len(s) and s[idx].isdigit():
        num = num * 10 + int(s[idx])
        idx += 1
    result = sign * num
    INT_MAX, INT_MIN = 2**31 - 1, -(2**31)
    return max(INT_MIN, min(INT_MAX, result))

print(my_atoi('   -42'))          # -42
print(my_atoi('4193 with words'))  # 4193

Algoritma Sorularında Dize Dilimleme

Dize dilimleme sürekli kullanılır, ancak gizli maliyetleri vardır: s[i:j], j-i uzunluğunda yeni bir dize oluşturur ve O(j-i) zamanda çalışır. Alt dizeleri özyinelemeli işlevlere geçirmeniz gerektiğinde, O(n²) ayırma ek yükünü önlemek için gerçek alt dize yerine dizinleri (start, end) geçirmeyi düşünün. Bu iyileştirme, birçok alt dizenin sınandığı en uzun palindromik alt dize gibi problemlerde önemlidir.

# Naive: O(n^3) because slicing inside nested loops
def is_palindrome_naive(s):
    return s == s[::-1]  # O(n) slice + O(n) compare

# Pass indices to avoid allocating substrings
def is_palindrome_range(s, left, right):
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1; right -= 1
    return True  # O(right-left) time, O(1) space

print(is_palindrome_range('racecar', 0, 6))  # True
print(is_palindrome_range('hello',   0, 4))  # False

Dizeler: Mülakat Hızlı Başvuru Rehberi

Mülakatlar için bu dize yöntemlerini zihninizde hazır tutun:

  • split / join — ayrıştırma ve oluşturma
  • strip / lstrip / rstrip — boşlukları kırpma
  • lower / upper — harf durumunu normalleştirme
  • find / index — alt dizeleri bulma
  • replace — değiştirme
  • isalnum / isalpha / isdigit — karakter sınıfı denetimleri
  • ord / chr — sabit alfabeli problemlerde ASCII aritmetiği
  • startswith / endswith — önek ve sonek denetimleri

# Combining methods: reverse words, preserve spaces
def reverse_words(s):
    return ' '.join(reversed(s.split()))

print(reverse_words('  hello   world  '))
# 'world hello'

# Check anagram using sorted strings
def is_anagram(s, t):
    return sorted(s) == sorted(t)

print(is_anagram('anagram', 'nagaram'))  # True
print(is_anagram('rat', 'car'))          # False

Hızlı Kontrol

Bu dersteki Veri Yapıları ve Algoritmalar — Kodlama Mülakatı Hazırlığı kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: Python dizeleri değiştirilemezdir — değişiklik yapmak için bir listeye dönüştürmeniz, değiştirmeniz ve ardından yeniden birleştirmeniz gerekir, karakter kodu dönüştürme işlevleri, küçük harf problemlerinde boyutu 26 olan sabit boyutlu frekans dizilerini mümkün kılar; bunlar sınırları belirli alfabelerde karma tablolarından daha hızlıdır ve bir döngüde + ile dize oluşturmak O(n²) maliyetlidir — her zaman bir listede biriktirin ve O(n) için sonda ''.join() kullanın. Sırada alt dize problemleri için kayan pencere tekniğini inceleyeceğiz.

Sıkça Sorulan Sorular

“Mülakatlar için Python Dize API’si” dersi ücretsiz mi?

Evet — “Mülakatlar için Python Dize API’si” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Mülakatlar için Python Dize API’si” dersinde ne öğreneceğim?

Ayrıştırma ve dönüştürme içeren mülakat problemlerinde görülen split, join, replace, find, ord/chr ve dize biçimlendirme kalıpları üzerinde çalışın. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Mülakatlar için Python Dize API’si” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Mülakatlar için Python Dize API’si
  2. Alt Dizeler için Kayan Pencere
  3. Anagramlar ve Karakter Sıklığı Haritaları
  4. Dize Kodlama, Ters Çevirme ve Palindromlar
← Coding Interview Prep Sayfasına Dön