🗂️ Setler & Sözlükler
Setler & Sözlükler: Hangi Python koleksiyon tipi en HIZLI "bu değer burada mı?" kontrolünü sağlar (O(1) karmaşıklık)? set dahili olarak hash tablosu kullanır.
Hangi Python koleksiyon tipi en HIZLI "bu değer burada mı?" kontrolünü sağlar (O(1) karmaşıklık)?
set dahili olarak hash tablosu kullanır. "değer in my_set" kontrolü O(1)'dir — boyuttan bağımsız sabit süre. list ve tuple her öğeyi tek tek kontrol eder (O(n)). Hızlı üyelik testi için her zaman set kullanın.
Bir set, kapıda parmak izi okuyan bir giriş sistemi gibi — aynı kişi ikinci kez girmeye çalışsa bile, içeride sadece BİR kayıt vardır. list(bug_ids) yazarsan sadece kopyalarsın, tekrarlar kalır; set(bug_ids) yazarsan Python her elemanı "daha önce gördüm mü?" diye kontrol eder ve tekilleştirir. Bunun bedeli ne? Set'in elemanları SIRASIZDIR ve indeksle erişilemez (set[0] çalışmaz) — çünkü set, hız için bir hash tablosu kullanır, sıralı bir liste değil. Java'da bu HashSet'e karşılık gelir. QA'de pratik kullanımı şu: 1000 test çalıştırıp "kaç FARKLI hata mesajı çıktı?" sorusuna len(set(error_messages)) ile tek satırda cevap verirsin. Peki madem set bu kadar kullanışlı, neden her yerde list yerine set kullanmıyoruz? Çünkü set'in ödediği bedel sadece sırasızlık değil: yalnızca DEĞİŞTİRİLEMEZ (hashable) elemanları kabul eder — bir liste veya sözlüğü set'e koyamazsın, TypeError alırsın. Java'da HashSet'e mutable bir nesne koyup sonra onu değiştirdiğinde nesnenin kaybolması da aynı kuralın başka bir yüzüdür. Kural şu: tekilliğin ve hızlı "var mı?" sorusunun önemli olduğu yerde set, sıranın anlam taşıdığı yerde (örneğin testlerin çalışma sırası) list.
☕ Java Biliyorsan: Kontrol Akışı Köprüsü
Java'daki HashSet'in karşılığı Python'daki set'tir. İçe aktarma gerekmez. {1, 2, 3} ile oluşturulur. Sıralama garantisi yoktur.
Python for-in, Java'nın enhanced for-each döngüsüne çok benzer. Temel fark: Python'da index VE değer için enumerate() kullanılır; Java'da iki ayrı döngü stili gerekir.
Python'da süslü parantez yok — GIRINTI blokları tanımlar! Eksik girinti = döngü gövdesi yok. Java'dan geçişte en büyük sözdizimi şoku budur.
Java'da her metod bir class içinde olmak zorundadır. Python fonksiyonları bağımsız (standalone) olabilir — küçük yardımcı araçlar için class yazmaya gerek yoktur. Varsayılan parametreler Java'nın method overloading'ini karşılar.
Python keyword argümanları güçlüdür: create_user("Bob", active=False, role="admin") — sıra önemli değil.
Micro Lab: Python kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adim Adim: Python kod yazma
Girdi ve veri tiplerini oku
Kritik satiri en kucuk degisiklikle tamamla