Elinde birbirine ait iki liste var: bir yanda öğrenci isimleri, öbür yanda notları. İkisini aynı anda gezmek için indeks hesabına girmene gerek yok. zip iki listeyi fermuar gibi birleştirir ve elemanları çift çift verir.
Kod
isimler = ["Ayşe", "Mert", "Zeynep"]notlar = [85, 70, 92]for isim, puan in zip(isimler, notlar): print(f"{isim}: {puan}")# Ayşe: 85# Mert: 70# Zeynep: 92
Bu satır nasıl çalışıyor?
zip(isimler, notlar) iki listenin aynı sıradaki elemanlarını eşleştirir: önce ("Ayşe", 85), sonra ("Mert", 70), sonra ("Zeynep", 92). Adı da buradan geliyor: fermuarın (zip) iki tarafı diş diş birbirine geçer.
for isim, puan in ... yazınca her çift, enumerate kartındaki gibi iki değişkene dağıtılır. Çiftlerin hepsini birden görmek istersen listeye çevirebilirsin:
print(list(zip(isimler, notlar)))# [('Ayşe', 85), ('Mert', 70), ('Zeynep', 92)]
zip olmadan aynı iş şöyle yapılır:
for i in range(len(isimler)): print(f"{isimler[i]}: {notlar[i]}")
Çalışır, ama isimler[i], notlar[i] diye her seferinde indeksle uğraşmak hem okumayı zorlaştırır hem de hata yapmaya açık kapı bırakır. zip‘li hali ne yaptığını kendisi anlatıyor.
İkiden fazla liste
zip istediğin kadar listeyi birleştirebilir:
sehirler = ["Adana", "İzmir", "Ankara"]for isim, puan, sehir in zip(isimler, notlar, sehirler): print(f"{isim} ({sehir}): {puan}")# Ayşe (Adana): 85# Mert (İzmir): 70# Zeynep (Ankara): 92
Dikkat
Listelerin uzunluğu farklıysa zip en kısa liste bitince durur ve hata vermez:
kisa = ["Ayşe", "Mert"]print(list(zip(kisa, notlar)))# [('Ayşe', 85), ('Mert', 70)] 92 sessizce kayboldu
Bir listeye eleman eklemeyi unuttuysan bunu fark etmeyebilirsin. Python 3.10 ve sonrasında zip(kisa, notlar, strict=True) yazarsan uzunluklar farklı olduğunda hata alırsın ve sorunu hemen görürsün.
Döngüleri Python Dersi 6’da, listeleri Python Dersi 7’de anlattım.

Bir yanıt yazın