Kod Kartı: Liste Üreteciyle Tek Satırda Filtre

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 hali
gecenler = []
for n in notlar:
if n >= 50:
gecenler.append(n)
# Tek satırlık hali
gecenler = [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 puan
print([n + 5 for n in notlar if n < 50])
# [45, 50] sadece kalanlara 5 puan, sadece onları listele
isimler = ["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.


Hatice Özbolat | Teknoloji ve AI Rehberi sitesinden daha fazla şey keşfedin

Son gönderilerin e-postanıza gönderilmesi için abone olun.

Comments

Bir yanıt yazın