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]
3
4for isim, yas in zip(isimleri, yaslar):
5print(f'{isim} {yas} yaşında')

Çıktı:

1Ali 25 yaşında
2Fatma 30 yaşında
3Ahmet 28 yaşında

zip() 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ı']
3
4kisi = dict(zip(anahtar, deger))
5print(kisi)

Çıktı:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
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_longest
2
3listA = [1, 2, 3]
4listB = ['a', 'b']
5
6for a, b in zip_longest(listA, listB, fillvalue=0):
7print(a, b)

Çıktı:

11 a
22 b
33 0

zip() 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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz