Kod Kartı: zip ile İki Listeyi Birlikte Gezmek

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.


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