Yayın Tarihi: 2 Şubat 2025
Python’da Liste Üreteçleri: Güçlü ve Esnek Liste Oluşturma
Giriş
Liste Üreteçleri, Python’un en güçlü ve esnek özelliklerinden biridir. Geleneksel döngü yapılarına kıyasla daha kısa, okunabilir ve genellikle daha hızlı kod yazmanıza olanak tanır. Bu özelliği öğrenmek, Python programcıları için zorunlu bir beceridir.
Temel Sözdizimi
Liste Üreteçleri’nin genel yapısı şu şekildedir:
[yeni_değer for eleman in mevcut_liste if koşul]
Sözdizimi Bileşenleri
yeni_değer: Her eleman için üretilen veya hesaplanan değer.eleman: Mevcut listedeki her bir öğe.mevcut_liste: Üzerinde işlem yapılacak kaynak liste.koşul(isteğe bağlı): Elemanların listeye dahil edilmesini kontrol eden filtre.
Pratik Örnekler
1. Basit Liste Oluşturma: Sayıların Kareleri
Sayıların karelerinden oluşan bir liste oluşturalım.
Klasik Yöntem
kareler = []
for i in range(10):
kareler.append(i**2)
print(kareler) # Çıktı: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Liste Üreteci Yöntemi
kareler = [i**2 for i in range(10)]
print(kareler) # Çıktı: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Açıklama: range(10)‘dan gelen her i değeri için i**2 hesaplanır ve listeye eklenir.
2. Koşullu Liste Oluşturma: Çift Sayılar
0’dan 9’a kadar olan çift sayıları bir liste olarak elde edelim.
Klasik Yöntem
ciftler = []
for i in range(10):
if i % 2 == 0:
ciftler.append(i)
print(ciftler) # Çıktı: [0, 2, 4, 6, 8]
Liste Üreteci Yöntemi
ciftler = [i for i in range(10) if i % 2 == 0]
print(ciftler) # Çıktı: [0, 2, 4, 6, 8]
Açıklama: if i % 2 == 0 koşulu, sadece çift sayıları listeye ekler.
Kodun Parçalarını Adım Adım Analiz Edelim
Adım 1: range(10)
range(10)fonksiyonu, 0’dan 9’a kadar olan (10 hariç) tam sayıları üretir.- Bu, şu diziyi temsil eder:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
Adım 2: for i in range(10)
for i in range(10)döngüsü,range(10)‘dan gelen her bir sayıyı sırasıylaideğişkenine atar.- Örneğin, döngü önce
i = 0, ardındani = 1, sonrai = 2ve bu şekilde devam eder.
Adım 3: if i % 2 == 0
if i % 2 == 0koşulu,i‘nin çift olup olmadığını kontrol eder.%operatörü, bir sayının başka bir sayıya bölümünden kalanı verir.- Eğer
i % 2 == 0, yanii‘nin 2’ye bölümünden kalan 0 ise, bu demektir kiiçift bir sayıdır.
- Eğer
- Örneğin:
0 % 2 == 0→ Doğru (0 çifttir).1 % 2 == 0→ Yanlış (1 tek).2 % 2 == 0→ Doğru (2 çifttir).
Adım 4: [i for i in range(10) if i % 2 == 0]
- Bu ifade,
range(10)‘dan alınan herideğeri için, eğeri % 2 == 0koşulu sağlanıyorsa,i‘yi yeni bir liste içine yerleştirir. - Koşulu sağlayan sayılar şunlardır:
0, 2, 4, 6, 8.
Adım 5: ciftler = [...]
- Yeni oluşturulan liste,
ciftleradlı bir değişkene atanır. - Sonuç olarak,
ciftlerşu hale gelir:[0, 2, 4, 6, 8].
3. print(ciftler)
print(ciftler)komutu,ciftlerlistesinin içeriğini ekrana yazdırır.- Çıktı şu şekilde olacaktır:
[0, 2, 4, 6, 8]
4. Özet
Bu kod, range(10)‘dan gelen sayıları kontrol ederek yalnızca çift olanlarını bir liste halinde toplar. Liste Üreteçleri yapısı, bu işlemi tek bir satırda daha kısa ve okunabilir bir şekilde gerçekleştirir.
Sonuç: Kodun çıktısı, [0, 2, 4, 6, 8] dir. 🚀
3. String İşleme: Kelime Uzunlukları
Bir string listesindeki her kelimenin uzunluğunu bulalım.
Klasik Yöntem
kelimeler = ["Python", "programlama", "kolay"]
uzunluklar = []
for kelime in kelimeler:
uzunluklar.append(len(kelime))
print(uzunluklar) # Çıktı: [6, 11, 5]
Liste Üreteci Yöntemi
kelimeler = ["Python", "programlama", "kolay"]
uzunluklar = [len(kelime) for kelime in kelimeler]
print(uzunluklar) # Çıktı: [6, 11, 5]
Açıklama: Her kelime için len(kelime) hesaplanır ve listeye eklenir.
4. İç İçe Liste İşlemleri: Kartezyen Çarpım
İki farklı listeden elemanları birleştirerek yeni bir liste oluşturalım.
Klasik Yöntem
liste1 = [1, 2, 3]
liste2 = ["a", "b", "c"]
sonuc = []
for x in liste1:
for y in liste2:
sonuc.append((x, y))
print(sonuc) # Çıktı: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), ...]
Liste Üreteci Yöntemi
liste1 = [1, 2, 3]
liste2 = ["a", "b", "c"]
sonuc = [(x, y) for x in liste1 for y in liste2]
print(sonuc) # Çıktı: [(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), ...]
Açıklama: İki iç içe döngüyü tek bir satırda ifade ettik.
Gelişmiş Kullanımlar
Matris Dönüşümleri
Bir matrisin transpozesini (satırları sütunlar haline getirme) alalım.
# 2x2'lik matrisin transpozunu alma
matris = [[1, 2], [3, 4]]
transpoze = [[satir[j] for satir in matris] for j in range(len(matris[0]))]
print(transpoze) # Çıktı: [[1, 3], [2, 4]]
Açıklama: Dıştaki comprehension, sütun indekslerini (j) belirlerken, içteki comprehension, her sütundaki elemanları toplar.
Sözlük Dönüşümleri
Bir sözlükten belirli bir şarta uyan anahtarları bir liste olarak çıkaralım.
# Başarılı öğrencileri bulma
ogrenciler = {'Ali': 85, 'Ayşe': 92, 'Mehmet': 78}
basarili_ogrenciler = [isim for isim, not_degeri in ogrenciler.items() if not_degeri >= 80]
print(basarili_ogrenciler) # Çıktı: ['Ali', 'Ayşe']
Açıklama: items() metodunu kullanarak sözlüğün her bir (key, value) ikilisini işleve sokup, belirli bir koşulu kontrol ettik.
Performans ve En İyi Uygulamalar
- Performans: Liste Üreteçleri genellikle geleneksel for döngülerinden daha hızlı çalışır.
- Okunabilirlik: Karmaşık işlemler için açık döngüler tercih edilebilir.
- Denge: Kodunuzu hem performanslı hem de okunabilir hale getirmek için denge kurun.
Uyarılar
- Karmaşık Ifadeler: Çok karmaşık Liste Üreteçleri’lar, okunabilirliği azaltabilir. Böyle durumlarda, ifadeleri birden fazla satırda yazmayı düşünün.
- Yan Etkiler: Yan etkisi olan işlemleri içeren durumlarda, geleneksel döngüleri tercih edin.
Sonuç
Liste Üreteçleri, Python’da listeleri işlemenin güçlü ve estetik bir yoludur. Doğru kullanıldığında, kodunuzu daha kısa, okunabilir ve performanslı hale getirir. Bu harika özelliğin potansiyelini keşfedin ve mutlu kodlamalar! 🚀
