Python'da zip() İşlevi Nasıl Kullanılır (Yinelenebilirleri Birleştirme)

Birden fazla yinelenebilir öğeyi paralel olarak birleştirmek için Python'un zip() işlevini nasıl kullanacağınızı öğrenin. Sözlük oluşturmada ustalaşın, sıkıştırmayı açın ve uzunluk uyumsuzluklarını giderin.

Bu Çözümü Editör'de deneyin

Genel Bakış

Veri kümeleri üzerinde yineleme yaparken, genellikle birden fazla ilgili listeyi paralel olarak işlemeniz gerekecektir. Örneğin, kullanıcı adları listesini kullanıcı kimlikleri listesiyle eşleştirmek veya X ve Y değerlerinin koordinatlarını eşleştirmek. Python, iç içe geçmiş döngüler veya liste indeksleme sayaçlarını kullanarak öğelere erişmek yerine zarif 'zip()' işlevini sağlar.

"zip(*iterables)" işlevi, argüman olarak birden fazla yinelenebilir öğeyi alır ve bunları toplayarak, i'inci demetin, giriş yinelenebilirlerinin her birinden i'inci öğeyi içerdiği bir demet yineleyicisi döndürür. Bu, tek bir "for" döngüsüyle iki veya daha fazla koleksiyon arasında aynı anda kolayca döngü yapmanıza olanak tanır.

Varsayılan olarak, yinelenebilir en kısa giriş tükendiğinde `zip()` birleştirmeyi durdurur. Daha uzun yinelenebilir öğelerde kalan öğeler atılır. Öğeleri en uzun yinelenebilirlik bitene kadar eşleştirmek istiyorsanız, eksik değerleri bir yer tutucuyla doldurursanız, Python standart kütüphanenin "itertools" modülünde "zip_longest()" sağlar.

Kod ve Yürütme Çıkışı

Bu komut dosyası paralel liste yinelemesini, zip kullanarak sözlük oluşturmayı ve zip_longest kullanarak uyumsuzlukları ele almayı gösterir.

zip_function.py
Editör'de deneyin
from itertools import zip_longest

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]

# 1. Basic Zipping in a loop
print("--- Parallel Iteration ---")
for name, score in zip(names, scores):
    print(f"{name} scored {score}")

# 2. Creating a dictionary from two lists
user_dict = dict(zip(names, scores))
print("\nCreated Dictionary:", user_dict)

# 3. Handling unequal list lengths with zip_longest
extra_names = ["Alice", "Bob", "Charlie", "David"]
short_scores = [85, 90]

# Standard zip truncates
print("\nStandard zip output:", list(zip(extra_names, short_scores)))

# zip_longest fills missing values
zipped_long = list(zip_longest(extra_names, short_scores, fillvalue="N/A"))
print("zip_longest output:", zipped_long)
Terminal Çıkışı
--- Parallel Iteration ---
Alice scored 85
Bob scored 90
Charlie scored 95

Created Dictionary: {'Alice': 85, 'Bob': 90, 'Charlie': 95}

Standard zip output: [('Alice', 85), ('Bob', 90)]
zip_longest output: [('Alice', 85), ('Bob', 90), ('Charlie', 'N/A'), ('David', 'N/A')]

Adım Adım Uygulama

  • Birleştirmek istediğiniz birden fazla listeyi veya yinelenebilir öğeyi zip() işlevine iletin.
  • Temiz paralel yinelemeler için oluşturulan demetleri bir for döngüsü ifadesinde açın.
  • Eşleme için dict(zip(keys_list,values_list)) kullanarak zip nesnesini bir sözlüğe dönüştürün.
  • Kuyruk değerlerini kaybetmeden eşit olmayan uzunluktaki listeleri birleştirmek için itertools.zip_longest dosyasını içe aktarın.

Sıkça Sorulan Sorular

Sıkıştırılmış bir tuple dizisini nasıl "açabilirim"?

Paket açma operatörünü *: list(zip(*zipped_tuples)) kullanarak bir diziyi tekrar ayrı listelere açabilirsiniz.

Zip() bellekteki öğeleri kopyalıyor mu?

Hayır, zip(), isteğe bağlı olarak öğeler üreten bir yineleyici döndürür ve bu da onu bellek açısından son derece verimli hale getirir.

İlgili Konular

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.