Python döngüleri: for, while ve comprehension örnekleri
Python Döngüleri

Python döngüleri: for, while ve comprehension örnekleri

Python Döngüleri

5 dk okuma süresi
Bu rehber, Python'da for ve while döngülerinin nasıl çalıştığını, list comprehension ile nasıl kısa ve okunabilir liste oluşturulacağını, enumerate ve zip kullanarak paralel yineleme örneklerini ve pratik ipuçlarını açıklar.
Python döngüleri: for, while ve comprehension örnekleri

Giriş

Python'da yineleme (iteration) temel bir programlama yapısıdır. Veri üzerinde adım adım gezinmek için en sık kullanılan araçlar for ve while döngüleridir; ayrıca list comprehension daha kısa ve okunabilir liste oluşturma sağlar. Resmi belgelerde bu yapılar ve sözdizimleri detaylı şekilde ele alınır; özellikle döngülerin sözdizimi için Python'un resmi dokümantasyonu ve list comprehension için PEP 202 faydalı referanslardır (Python resmi dokümantasyonu, PEP 202).

for döngüsü: temel kullanım ve pratik örnekler

for döngüsü, üzerinde yineleme yapılabilen (iterable) bir nesnenin her elemanı için işlem yapar. Örnek iterables: listeler, tuple'lar, stringler, dosya nesneleri veya generatorlar.

Basit bir örnek:

my_list = [10, 20, 30]
for x in my_list:
  print(x)

for döngüsü ile sözlüklerde varsayılan olarak anahtarlar (keys) üzerinden yineleme yapılır; anahtar ve değer birlikte gerekirse .items() kullanın:

person = {'ad': 'Ayşe', 'yaş': 30}
for key, value in person.items():
  print(key, value)

enumerate ile indeks gerektiren yineleme

Elemanların indeksine ihtiyaç duyduğunuzda enumerate kullanın. enumerate, her elemana birlikte bir indeks döndürür; başlangıç değeri belirtilerek indeks numarası değiştirilebilir.

fruits = ['elma', 'armut', 'muz']
for idx, fruit in enumerate(fruits, start=1):
  print(idx, fruit)

Bu yöntem, manuel sayaç tutmaktan daha temiz ve hata olasılığı daha azdır (resmi dokümantasyonda enumerate işleviyle ilgili bilgiler yer alır).

zip ile paralel yineleme

Birden fazla iterable'ı aynı anda gezmek için zip kullanılır. zip, her çağrıda ilgili iterables'tan birer eleman içeren tuple döndürür ve en kısa iterable bitince durur.

nums = [1, 2, 3]
letters = ['a', 'b', 'c', 'd']
for n, ch in zip(nums, letters):
  print(n, ch)

Bu örnekte çıktıda sadece ilk üç çift olur; eksik veya farklı uzunluktaki dizilerle çalışırken bu davranışı göz önünde bulundurun.

while döngüsü: koşula dayalı yineleme

while döngüsü, verilen koşul doğru olduğu sürece çalışır. Döngü sayısı koşula bağlıdır ve genellikle sayaç, kullanıcı girdisi veya başka bir sentinel değere bağlı işler için kullanılır.

i = 0
while i < 5:
  print(i)
  i += 1

while kullanırken sonsuz döngü riskine karşı dikkatli olun; döngü koşulunun bir noktada false olmasını sağlayan bir adım (ör. sayaç artışı veya break) olmalıdır. Bilinen bir pattern: while True + break ile sentinel kontrolü yapmak.

List comprehension: kısa ve okunabilir liste üretimi

List comprehension, bir iterable üzerinden dönerek yeni bir liste üretmenin kısa bir yoludur. Bu yapı PEP 202 ile Python'a eklenmiş ve resmi belgede tanımlanmıştır.

Temel sözdizimi: [expression for item in iterable if condition]

# Her elemanı ikiyle çarpıp liste oluşturma
doubled = [x * 2 for x in range(5)] # [0, 2, 4, 6, 8]
# Filtreleme ile çift sayıları alma
evens = [x for x in range(10) if x % 2 == 0]

List comprehension tek satırda dönüşüm ve filtreleme yapmak için uygundur; karmaşık mantık veya çok sayıda yan etkisi olan ifadeler için normal döngüler okunabilirliği koruyabilir. PEP 202 list comprehension yaklaşımının tasarım gerekçelerine dair arka plan sunar.

Nested (iç içe) comprehension

İç içe list comprehension kullanılabilir ancak karmaşıklık çabuk artar. Okunurluk önemlidir; gerekirse iç döngüyü ayrı bir fonksiyona almak daha sürdürülebilir olabilir.

matrix = [[i * j for j in range(3)] for i in range(3)]

Ne zaman hangi yapıyı seçmeli? (Hızlı karar rehberi)

  • for döngüsü: Bilinen bir iterable üzerinden adım adım gezinirken (özellikle her adımda yan etki gerekiyorsa).
  • while döngüsü: İterasyon sayısı koşula bağlıysa (ör. kullanıcı girdisi, sentinel, koşul sağlandığı sürece).
  • list comprehension: Bir iterable'dan yeni bir liste oluşturup her elemanı dönüştürmek veya filtrelemek istiyorsanız, kısa ve temiz bir ifade için uygundur.
  • enumerate: İndeks ve eleman birlikte gerektiğinde tercih edin.
  • zip: İki veya daha fazla iterable'ı paralel işlemek gerektiğinde kullanın; farklı uzunluklarda çalışırken en kısa olanın sınırını unutmayın.

İyi uygulamalar ve dikkat edilmesi gerekenler

  • Listeyi iterasyon sırasında değiştirmeyin; bunun yerine yeni bir liste oluşturun veya tersine kopya üzerinde işlem yapın.
  • enumerate kullanarak manuel sayaçtan kaçının; daha az hata-prone bir yaklaşımdır.
  • List comprehension'larda yan etki (ör. global değişken değiştirme, I/O) yerine saf dönüşümler tercih edin; bu okunabilirliği artırır.
  • Büyük veri setleri için liste yerine generator ifadeleri veya iterator tabanlı yaklaşımlar düşünün (bellek yönetimi için önemlidir).
  • Performansla ilgili belirsizlik varsa profil aracı (ör. timeit, profiler) kullanarak hangi yaklaşımın daha uygun olduğunu ölçün.

Kısa referans tablosu

YapıKullanımÖrnek
forHer iterable elemanı için işlemfor x in my_list: print(x)
whileKoşul doğru olduğu sürece tekrari = 0; while i < 5: i += 1
list comprehensionKısa liste oluşturma[x*2 for x in range(5)]
enumerateİndeks + değerfor i, v in enumerate(seq, 1): ...
zipParalel yinelemefor a, b in zip(A, B): ...

Pratik örnek: iki listeyi eşleştirip hesaplama

Amacımız iki listeden sırasıyla çiftler oluşturarak her çiftin toplamını bulmak olsun. Hem zip hem de list comprehension kullanımı pratik ve kısa bir çözüm sağlar:

nums = [10, 20, 30]
names = ['x', 'y', 'z']
pairs = [(n, name, n + idx) for idx, (n, name) in enumerate(zip(nums, names))]
print(pairs)

Bu örnek zip ile paralel yineleme ve enumerate ile indeks kullanımını aynı anda gösterir; çıktı, her öğe için bir tuple listesi olacaktır.

Sonuç ve kaynaklar

Python'da for ve while döngüleri ile list comprehension, enumerate ve zip fonksiyonları temel tekrar eden işlemler için güçlü araçlardır. Hangi yapıyı kullanacağınızı belirlerken okunabilirlik, veri büyüklüğü ve döngü amacını göz önünde bulundurun. Resmi sözdizimi ve detaylı açıklamalar için Python'un dokümantasyonunu ve list comprehension tasarımını anlatan PEP 202'yi inceleyin.

Yorumlar

Henüz yorum yapılmamış. İlk yorumu sen yaz.