Python zip() ile Paralel İterasyon: Birden Fazla Listeyi Aynı Anda Döngüle
Python'da sık sık iki ya da daha fazla listeyi aynı anda döngülemek gerekir. bu noktada zip() fonksiyonu devreye giriyor. zip() sayesinde birden fazla iterable'ı (liste, tuple, string vb.) paralel olarak gezebilir ve her adımda tüm koleksiyonlardan eş zamanlı olarak eleman alabilirsin.
zip() fonksiyonu, verilen iterables'ları "fermuarla kapatır" gibi düşün. Her iterasyon sırasında her koleksiyondan birer eleman alır ve bunları tuple'lar halinde döndürür. Örneğin:
1isimleri = ['Ali', 'Fatma', 'Ahmet']2yaslar = [25, 30, 28]34for isim, yas in zip(isimleri, yaslar):5print(f'{isim} {yas} yaşında')Çıktı:
1Ali 25 yaşında2Fatma 30 yaşında3Ahmet 28 yaşındazip() en pratik kullanımlarından biri sözlük oluşturmak. Anahtar ve değer listelerini hızlıca bir dictionary'ye dönüştürebilirsin:
1anahtar = ['isim', 'sehir', 'meslek']2deger = ['Mehmet', 'İstanbul', 'Yazılımcı']34kisi = dict(zip(anahtar, deger))5print(kisi)Çıktı:
1{'isim': 'Mehmet', 'sehir': 'İstanbul', 'meslek': 'Yazılımcı'}Eğer iterables'ların uzunlukları farklıysa, zip() kısa olanı bitirince duruyor. Tüm öğeleri işlemek istiyorsan itertools.zip_longest() kullan:
1from itertools import zip_longest23listA = [1, 2, 3]4listB = ['a', 'b']56for a, b in zip_longest(listA, listB, fillvalue=0):7print(a, b)Çıktı:
11 a22 b33 0zip() ile ters işlemi de yapabilirsin, tuple'lar listesini ayrıştırmak için yine zip() ve unpacking operatörü (*) kullan:
1veriler = [('Ali', 25), ('Fatma', 30), ('Ahmet', 28)]2isimleri, yaslar = zip(*veriler)3print(isimleri) # ('Ali', 'Fatma', 'Ahmet')4print(yaslar) # (25, 30, 28)zip() kodunu kısaltır ve okunabilir kılar. Özellikle veri işleme, CSV dosyaları ile çalışma ya da liste dönüşümlerinde hayat kurtarıcı. Bir kez alışınca, döngü yazarken ilk aklına gelen araç olacak.
0 yorum