Bir listeden şarta uyan elemanları seçip yeni bir liste yapmak için dört satır yazıyorduk: boş liste, for, if, append. Liste üreteci (list comprehension) aynı işi tek satırda yapıyor.
İtiraf edeyim, Python öğrenirken bana en zor gelen konulardan biri buydu. İlk gördüğümde satırın nereden başlayıp nerede bittiğini çözemiyordum. Aşağıdaki okuma yöntemini öğrenince her şey yerine oturdu.
Kod
notlar = [70, 85, 40, 90, 45]# Dört satırlık haligecenler = []for n in notlar: if n >= 50: gecenler.append(n)# Tek satırlık haligecenler = [n for n in notlar if n >= 50]print(gecenler) # [70, 85, 90]
Bu satır nasıl okunur?
[n for n in notlar if n >= 50] satırını soldan sağa şöyle oku: “Listeye n‘yi koy, notlar içindeki her n için, eğer n 50 veya üstüyse.” Yani dört satırlık kodun parçaları aynı, sadece yerleri değişmiş: listeye eklenecek şey en başa, for ortaya, if sona geliyor. Köşeli parantezler de “sonuç bir liste” demek.
Filtrelemenin yanında dönüştürme
Baştaki kısımda sadece n yazmak zorunda değilsin; her elemanı değiştirebilirsin:
print([n + 5 for n in notlar])# [75, 90, 45, 95, 50] herkese 5 puanprint([n + 5 for n in notlar if n < 50])# [45, 50] sadece kalanlara 5 puan, sadece onları listeleisimler = ["ayşe", "mert", "zeynep"]print([i.capitalize() for i in isimler])# ['Ayşe', 'Mert', 'Zeynep']
_ ne demek?
Matrix yağmuru yazısındaki şu satırı hatırla:
damlalar = [random.randint(-yukseklik, 0) for _ in range(genislik)]
Burada döngü değişkenini hiç kullanmıyoruz; sadece genislik kadar rastgele sayı üretmek istiyoruz. Python’da kullanılmayan değişkene genelde _ adı verilir. Bu, okuyana “bu değere ihtiyacım yok, sadece tekrar sayısı önemli” der.
Dikkat
Liste üreteci kısa ve okunaklı olduğunda güzel. Ama içine çok şey sıkıştırırsan okunmaz hale gelir:
# Okuması zor[n * 2 if n > 60 else n for n in notlar if n % 5 == 0 and n != 45]
Bir satırı okumak için birkaç kez durman gerekiyorsa dört satırlık for döngüsüne geri dön. Kodu kısa yazmak değil, anlaşılır yazmak amaç.
Listeleri Python Dersi 7’de, for ve if‘i Python Dersi 5 ve 6’da anlattım.

Bir yanıt yazın