Dalam pemrograman Python, proses iterasi paralel sering dibutuhkan ketika kita ingin menelusuri dua atau lebih struktur data secara bersamaan. Salah satu cara paling efisien dan “Pythonic” untuk melakukannya adalah dengan menggunakan fungsi zip().
Fungsi ini memungkinkan penggabungan beberapa iterable (seperti list, tuple, atau string) menjadi satu objek iterator, yang berisi elemen-elemen berpasangan dari masing-masing iterable.
Artikel ini akan membahas secara lengkap tentang zip(), cara kerja, contoh penggunaan, hingga kasus nyata dalam dunia pemrograman.
Apa Itu Fungsi zip()?
Fungsi zip() di Python digunakan untuk menggabungkan dua atau lebih iterable menjadi satu iterator berisi tuple-tuple yang berpasangan.
Setiap tuple akan berisi elemen dari indeks yang sama dari setiap iterable.
# Sintaks dasar zip(iterable1, iterable2, ...) # Contoh sederhana nama = ['Andi', 'Budi', 'Citra'] usia = [25, 30, 22] hasil = zip(nama, usia) print(list(hasil))
Output dari kode di atas akan menjadi:
[('Andi', 25), ('Budi', 30), ('Citra', 22)]
Artinya, zip() akan mengambil elemen pertama dari setiap iterable, lalu membuat pasangan tuple dari nilai-nilai tersebut.
Kemudian lanjut ke elemen kedua, dan seterusnya. Proses ini akan berhenti pada panjang iterable terpendek.
Cara Kerja zip() Secara Detail
Jika salah satu iterable memiliki panjang lebih pendek dari yang lain, maka zip() akan berhenti pada iterable terpendek.
Contohnya:
nama = ['Andi', 'Budi', 'Citra'] usia = [25, 30] hasil = list(zip(nama, usia)) print(hasil)
Output:
[('Andi', 25), ('Budi', 30)]
Perhatikan bahwa elemen “Citra” tidak ikut digabungkan karena iterable usia hanya memiliki dua elemen.
Jika kamu ingin tetap memasukkan semua data dengan pengisian nilai default untuk elemen yang hilang, kamu dapat menggunakan modul itertools.zip_longest() dari pustaka standar Python.
from itertools import zip_longest nama = ['Andi', 'Budi', 'Citra'] usia = [25, 30] hasil = list(zip_longest(nama, usia, fillvalue='Tidak diketahui')) print(hasil)
Output:
[('Andi', 25), ('Budi', 30), ('Citra', 'Tidak diketahui')]
Dengan zip_longest(), semua elemen dari iterable terpanjang akan tetap diikutsertakan, dan nilai yang tidak ada akan digantikan oleh nilai fillvalue.
Iterasi Paralel Menggunakan zip()
Salah satu penggunaan utama dari zip() adalah untuk melakukan iterasi paralel pada beberapa list.
Misalnya, kita memiliki dua list yang berisi nama siswa dan nilai ujian mereka.
Kita bisa menampilkan hasilnya secara bersamaan menggunakan zip().
nama_siswa = ['Rina', 'Doni', 'Santi']
nilai = [85, 90, 78]
for n, v in zip(nama_siswa, nilai):
print(f"{n} mendapatkan nilai {v}")
Output:
Rina mendapatkan nilai 85 Doni mendapatkan nilai 90 Santi mendapatkan nilai 78
Pendekatan ini lebih elegan dibandingkan menggunakan indeks dan fungsi range(), serta mengurangi risiko kesalahan dalam sinkronisasi data antar-list.
Menggunakan zip() untuk Mengubah Data
Selain untuk iterasi, zip() juga sering digunakan untuk melakukan transformasi data. Misalnya, menggabungkan dua list menjadi dictionary.
keys = ['nama', 'usia', 'kota'] values = ['Andi', 25, 'Surabaya'] data_dict = dict(zip(keys, values)) print(data_dict)
Output:
{'nama': 'Andi', 'usia': 25, 'kota': 'Surabaya'}
Dengan teknik ini, kita dapat dengan cepat membuat struktur data yang lebih kompleks, seperti dictionary, tanpa harus melakukan iterasi manual.
Contoh Kasus Nyata: Menggabungkan Data dari Dua Sumber
Bayangkan kamu sedang mengolah data dari dua file berbeda: satu berisi daftar produk dan satu lagi berisi harga produk.
Kamu dapat menggunakan zip() untuk menggabungkan keduanya sebelum menulis ulang ke file baru atau menampilkan hasilnya.
produk = ['Sabun', 'Shampoo', 'Sikat Gigi', 'Pasta Gigi']
harga = [5000, 12000, 8000, 10000]
for p, h in zip(produk, harga):
print(f"{p:<12} : Rp{h}")
Output:
Sabun : Rp5000 Shampoo : Rp12000 Sikat Gigi : Rp8000 Pasta Gigi : Rp10000
Dengan cara ini, kamu dapat menampilkan data secara terstruktur, menghemat waktu, dan menjaga keakuratan antar data.
Unzipping: Membalikkan Fungsi zip()
Selain menggabungkan data, kamu juga bisa memisahkan kembali hasil zip() menjadi list-list terpisah menggunakan operator * (unpacking).
gabungan = [('Andi', 25), ('Budi', 30), ('Citra', 22)]
nama, usia = zip(*gabungan)
print(nama)
print(usia)
Output:
('Andi', 'Budi', 'Citra')
(25, 30, 22)
Teknik ini sering digunakan saat kita ingin melakukan transformasi dua arah: menggabungkan lalu memisahkan kembali data sesuai kebutuhan.
Kesimpulan
Fungsi zip() merupakan fitur yang sangat berguna dalam Python untuk melakukan iterasi paralel, penggabungan data, dan transformasi struktur.
Dengan menggunakan zip(), kode Python menjadi lebih ringkas, mudah dibaca, dan efisien.
Baik untuk data sederhana seperti list nama dan nilai, maupun untuk aplikasi nyata seperti pemrosesan data CSV atau JSON,zip() adalah alat penting yang wajib dipahami setiap programmer Python.
Dengan memahami fungsi ini secara mendalam, kamu dapat meningkatkan efisiensi dalam menulis kode Python dan menghindari kesalahan umum dalam sinkronisasi data antar iterable.