Fungsi zip()
zip() adalah built-in function Python yang digunakan untuk menggabungkan dua atau lebih iterable berdasarkan posisi elemennya.
Nama zip() dapat dianalogikan seperti ritsleting. Beberapa iterable digabungkan secara berpasangan berdasarkan urutan elemennya.
Misalnya terdapat dua list:
numbers = [1, 2, 3]
letters = ["a", "b", "c"]
Dengan zip():
result = zip(numbers, letters)
secara konsep hasilnya:
1 → a
2 → b
3 → c
Sehingga jika dikonversi menjadi list:
[(1, "a"), (2, "b"), (3, "c")]
Sintaks Dasar
Sintaks dasar zip() adalah:
zip(*iterables)
zip() dapat menerima dua atau lebih iterable.
Contohnya:
zip(list1, list2)
atau:
zip(list1, list2, list3)
Setiap elemen akan digabungkan berdasarkan posisi.
Cara Kerja zip()
Misalnya kita memiliki:
numbers = [1, 2, 3]
letters = ["a", "b", "c"]
Ketika menggunakan:
zip(numbers, letters)
Python mengambil:
Elemen pertama:
1 + "a"
↓
(1, "a")
Kemudian:
Elemen kedua:
2 + "b"
↓
(2, "b")
Kemudian:
Elemen ketiga:
3 + "c"
↓
(3, "c")
Hasil akhirnya:
[(1, "a"), (2, "b"), (3, "c")]
Menggabungkan Dua List
Contoh sederhana:
my_list = [1, 2, 3]
your_list = [10, 20, 30]
result = zip(
my_list,
your_list
)
print(list(result))
Output:
[(1, 10), (2, 20), (3, 30)]
Elemen digabungkan berdasarkan posisi:
1 + 10 → (1, 10)
2 + 20 → (2, 20)
3 + 30 → (3, 30)
Menggabungkan Lebih dari Dua Iterable
zip() dapat digunakan dengan lebih dari dua iterable.
Contoh:
numbers = [1, 2, 3]
scores = [10, 20, 30]
grades = ["A", "B", "C"]
result = zip(
numbers,
scores,
grades
)
print(list(result))
Output:
[
(1, 10, "A"),
(2, 20, "B"),
(3, 30, "C")
]
Setiap tuple berisi elemen dari posisi yang sama.
Iterable Tidak Harus Memiliki Tipe yang Sama
zip() dapat menggabungkan berbagai jenis iterable.
Misalnya:
numbers = [1, 2, 3]
scores = (10, 20, 30)
grades = ["A", "B", "C"]
result = zip(
numbers,
scores,
grades
)
print(list(result))
Output:
[
(1, 10, "A"),
(2, 20, "B"),
(3, 30, "C")
]
Pada contoh tersebut:
numbers → list
scores → tuple
grades → list
zip() tetap dapat menggabungkannya.
zip() dengan String
String juga merupakan iterable.
Contoh:
letters = ["A", "B", "C"]
numbers = "123"
result = zip(
letters,
numbers
)
print(list(result))
Output:
[("A", "1"), ("B", "2"), ("C", "3")]
Karena string:
"123"
dapat diiterasi menjadi:
"1"
"2"
"3"
zip() dengan Iterable yang Berbeda Panjang
Salah satu hal penting yang perlu diperhatikan adalah panjang iterable dapat berbeda.
Misalnya:
numbers = [1, 2, 3, 4]
letters = ["a", "b"]
Kemudian:
result = zip(
numbers,
letters
)
print(list(result))
Output:
[(1, "a"), (2, "b")]
zip() berhenti ketika iterable yang paling pendek sudah habis.
Secara konsep:
numbers:
1 2 3 4
letters:
a b
zip():
1-a
2-b
Elemen:
3
4
tidak memiliki pasangan sehingga tidak dimasukkan ke hasil.
zip() Menghasilkan zip Object
Seperti map() dan filter(), zip() menghasilkan sebuah zip object yang bersifat iterator.
Contoh:
numbers = [1, 2, 3]
letters = ["a", "b", "c"]
result = zip(
numbers,
letters
)
print(result)
Hasilnya adalah object zip.
Untuk melihat isi datanya, kita dapat mengubahnya menjadi list:
print(list(result))
Output:
[(1, "a"), (2, "b"), (3, "c")]
zip() Hanya Dapat Dikonsumsi Sekali
Karena zip() menghasilkan iterator, setelah seluruh data dikonsumsi, iterator tersebut tidak dapat digunakan kembali untuk mendapatkan data yang sama.
Contoh:
numbers = [1, 2, 3]
letters = ["a", "b", "c"]
result = zip(
numbers,
letters
)
print(list(result))
print(list(result))
Output:
[(1, "a"), (2, "b"), (3, "c")]
[]
Pada pemanggilan kedua, hasilnya kosong karena iterator sudah habis dikonsumsi.
Jika membutuhkan data untuk digunakan berkali-kali, kita dapat menyimpannya sebagai list:
result = list(
zip(
numbers,
letters
)
)
print(result)
print(result)
Output:
[(1, "a"), (2, "b"), (3, "c")]
[(1, "a"), (2, "b"), (3, "c")]
Mengubah Hasil zip() Menjadi Dictionary
Salah satu penggunaan zip() yang sangat berguna adalah membuat dictionary dari dua iterable.
Misalnya:
keys = [
"name",
"age",
"city"
]
values = [
"Budi",
25,
"Palu"
]
Kita dapat menggunakan:
result = dict(
zip(
keys,
values
)
)
print(result)
Output:
{
"name": "Budi",
"age": 25,
"city": "Palu"
}
Secara konsep:
"name" + "Budi"
↓
"name": "Budi"
"age" + 25
↓
"age": 25
"city" + "Palu"
↓
"city": "Palu"
Contoh Data User
Misalnya kita memiliki data user yang terpisah:
names = [
"Budi",
"Andi",
"Citra"
]
ages = [
25,
30,
22
]
Kita dapat menggabungkannya:
users = list(
zip(
names,
ages
)
)
print(users)
Output:
[
("Budi", 25),
("Andi", 30),
("Citra", 22)
]
Sekarang setiap nama memiliki pasangan usia berdasarkan posisinya.
Menggabungkan Data yang Terpisah
zip() sangat berguna ketika data yang berhubungan disimpan dalam iterable yang terpisah.
Misalnya:
usernames = [
"budi",
"andi",
"citra"
]
phone_numbers = [
"0811111111",
"0822222222",
"0833333333"
]
Kita dapat menggabungkannya:
users = list(
zip(
usernames,
phone_numbers
)
)
print(users)
Output:
[
("budi", "0811111111"),
("andi", "0822222222"),
("citra", "0833333333")
]
zip() dan Unpacking
Hasil zip() juga dapat digunakan bersama unpacking.
Misalnya:
names = ["Budi", "Andi", "Citra"]
ages = [25, 30, 22]
users = zip(
names,
ages
)
for name, age in users:
print(name, age)
Output:
Budi 25
Andi 30
Citra 22
Pada setiap perulangan, tuple:
("Budi", 25)
di-unpack menjadi:
name = "Budi"
age = 25
zip() dalam Perulangan
zip() sangat sering digunakan langsung dalam for.
Contoh:
names = ["Budi", "Andi", "Citra"]
scores = [80, 90, 75]
for name, score in zip(names, scores):
print(name, score)
Output:
Budi 80
Andi 90
Citra 75
Pendekatan ini lebih praktis daripada menggunakan index secara manual.
Tanpa zip()
Tanpa zip(), kita mungkin perlu menggunakan index:
names = ["Budi", "Andi", "Citra"]
scores = [80, 90, 75]
for index in range(len(names)):
print(
names[index],
scores[index]
)
Dengan zip():
for name, score in zip(names, scores):
print(name, score)
Kode menjadi lebih sederhana dan langsung menunjukkan hubungan antara kedua data.
zip() dan Functional Programming
zip() sering digunakan dalam Functional Programming untuk menggabungkan beberapa sumber data sebelum diproses lebih lanjut.
Misalnya:
Data A ─────┐
│
Data B ─────┼──→ zip() ──→ Data gabungan
│
Data C ─────┘
Hasil dari zip() kemudian dapat diproses menggunakan function lain seperti:
zip()
↓
map()
↓
filter()
Menggabungkan zip() dengan map()
Contoh:
numbers1 = [1, 2, 3]
numbers2 = [10, 20, 30]
def add(numbers):
return numbers[0] + numbers[1]
result = map(
add,
zip(
numbers1,
numbers2
)
)
print(list(result))
Output:
[11, 22, 33]
Alurnya:
numbers1
+
numbers2
↓
zip()
↓
[(1, 10), (2, 20), (3, 30)]
↓
map()
↓
[11, 22, 33]
zip() dan Immutability
zip() tidak mengubah iterable yang digunakan.
Contoh:
numbers = [1, 2, 3]
scores = [10, 20, 30]
result = list(
zip(
numbers,
scores
)
)
print(numbers)
print(scores)
print(result)
Output:
[1, 2, 3]
[10, 20, 30]
[(1, 10), (2, 20), (3, 30)]
Data asli tetap sama.
zip() menghasilkan struktur data baru ketika hasil iterator dikonsumsi dan dikonversi menjadi list.
Perbedaan map(), filter(), dan zip()
Ketiga function ini memiliki tujuan yang berbeda.
map()
Digunakan untuk transformasi.
Data
↓
Function
↓
Data hasil transformasi
Contoh:
list(
map(
lambda number: number * 2,
numbers
)
)
filter()
Digunakan untuk seleksi.
Data
↓
Condition
↓
Data yang memenuhi kondisi
Contoh:
list(
filter(
lambda number: number > 2,
numbers
)
)
zip()
Digunakan untuk menggabungkan data berdasarkan posisi.
Data A ──┐
├──→ zip() → Data gabungan
Data B ──┘
Contoh:
list(
zip(
names,
ages
)
)
Kapan Menggunakan zip()?
zip() cocok digunakan ketika:
- Memiliki beberapa iterable yang memiliki hubungan berdasarkan posisi.
- Ingin menggabungkan beberapa sumber data.
- Ingin melakukan perulangan terhadap beberapa iterable secara bersamaan.
- Ingin membuat pasangan key-value.
- Ingin menghindari penggunaan index secara manual.
- Ingin membuat pipeline pemrosesan data.
Contohnya:
names + ages
↓
zip()
↓
user data
Hal yang Perlu Diperhatikan
1. zip() Mengikuti Iterable Terpendek
Jika panjang iterable berbeda:
numbers = [1, 2, 3]
letters = ["a", "b"]
maka:
list(
zip(
numbers,
letters
)
)
menghasilkan:
[(1, "a"), (2, "b")]
Elemen yang tidak memiliki pasangan tidak dimasukkan.
2. zip() Menghasilkan Iterator
Hasil:
zip(
numbers,
letters
)
adalah zip object.
Gunakan:
list(
zip(
numbers,
letters
)
)
jika ingin mendapatkan list.
3. zip() Tidak Mengubah Data Asli
Iterable yang digunakan tidak dimodifikasi oleh zip().
4. Posisi Elemen Sangat Penting
zip() memasangkan data berdasarkan posisi.
Contoh:
names:
Budi
Andi
Citra
ages:
25
30
22
maka:
Budi → 25
Andi → 30
Citra → 22
Jika urutan datanya tidak sesuai, pasangan yang dihasilkan juga tidak sesuai.
Kesimpulan
zip() adalah built-in function Python yang digunakan untuk menggabungkan dua atau lebih iterable berdasarkan posisi elemennya.
Contoh dasar:
names = ["Budi", "Andi", "Citra"]
ages = [25, 30, 22]
result = list(
zip(
names,
ages
)
)
print(result)
Output:
[
("Budi", 25),
("Andi", 30),
("Citra", 22)
]
Hal penting yang perlu diingat:
zip()dapat menerima dua atau lebih iterable.- Elemen digabungkan berdasarkan posisi.
- Hasilnya berupa tuple.
zip()menghasilkanzip objectyang merupakan iterator.- Untuk mendapatkan list, gunakan
list(). - Jika panjang iterable berbeda,
zip()berhenti pada iterable terpendek. zip()dapat digunakan denganlist,tuple,set, string, dan iterable lainnya.zip()dapat digunakan untuk membuat dictionary dengandict(zip(keys, values)).zip()tidak mengubah data asli.zip()sangat berguna dalam pemrosesan dan penggabungan data.
Secara sederhana, ingat pola berikut:
Iterable 1 ──┐
│
Iterable 2 ──┼──→ zip() ──→ Tuple
│
Iterable 3 ──┘
Setelah memahami map(), filter(), dan zip(), materi berikutnya dapat dilanjutkan dengan reduce(), yang digunakan untuk mengolah sejumlah elemen menjadi satu nilai hasil.