โ† Semua pembelajaran / Python Dasar
Fase 3 ยท Perulangan

enumerate dan zip

Dua kebutuhan yang muncul terus-menerus dalam perulangan, dan dua fungsi bawaan yang menyelesaikannya dalam satu baris.

Sumber asli docs.python.org Resmi Rangkuman ~4 menit baca

Intisari

  • enumerate(data) memberi nomor urut + item sekaligus dalam satu perulangan.
  • Nomor mulai dari 0. Untuk mulai dari 1: enumerate(data, start=1).
  • zip(a, b) menyusuri dua list berdampingan, item ke-1 dengan item ke-1, dan seterusnya.
  • zip berhenti di list terpendek โ€” sisanya diabaikan diam-diam.
  • Keduanya membuat for i in range(len(data)) jadi hampir tidak pernah dibutuhkan lagi.

enumerate โ€” nomor urut tanpa repot

Kamu ingin mencetak daftar bernomor. Cara manualnya:

buah = ["apel", "jeruk", "mangga"]

nomor = 1
for b in buah:
    print(f"{nomor}. {b}")
    nomor += 1

Dengan enumerate, dua baris pengurus nomor itu hilang:

for nomor, b in enumerate(buah, start=1):
    print(f"{nomor}. {b}")
1. apel
2. jeruk
3. mangga

Perhatikan ada DUA variabel di antara for dan in, dipisah koma. enumerate menyerahkan sepasang nilai tiap putaran โ€” nomornya dan itemnya โ€” dan Python membongkar pasangan itu ke dua variabel sekaligus.

Tanpa start=1, nomornya mulai dari 0 โ€” yang justru berguna kalau nomor itu dipakai sebagai indeks:

for i, b in enumerate(buah):
    print(i, b)           # 0 apel / 1 jeruk / 2 mangga

zip โ€” dua daftar sekaligus

Kamu punya dua list yang isinya berpasangan menurut posisi:

nama = ["Ani", "Budi", "Cici"]
nilai = [85, 90, 78]

for n, v in zip(nama, nilai):
    print(f"{n}: {v}")
Ani: 85
Budi: 90
Cici: 78

Bandingkan dengan cara manual yang harus mengurus indeks sendiri:

for i in range(len(nama)):
    print(f"{nama[i]}: {nilai[i]}")

Hasilnya sama, tapi versi zip tidak bisa salah indeks โ€” dan kalau salah satu list lebih pendek, ia tidak error.

zip berhenti di yang terpendek. Kalau nama berisi 3 item dan nilai hanya 2, perulangan berjalan 2 kali dan item ketiga hilang tanpa peringatan apa pun. Kalau data yang tidak sama panjang itu tanda ada masalah, cek dulu: if len(nama) != len(nilai):.

Menggabungkan keduanya

for i, (n, v) in enumerate(zip(nama, nilai), start=1):
    status = "lulus" if v >= 80 else "gagal"
    print(f"{i}. {n:<8} {v:>3}  {status}")
1. Ani       85  lulus
2. Budi      90  lulus
3. Cici      78  gagal

Ringkasan

KebutuhanTulis
Item sajafor x in data:
Item + nomor urutfor i, x in enumerate(data):
Item + nomor mulai 1for i, x in enumerate(data, start=1):
Dua list berpasanganfor a, b in zip(list1, list2):
Sekadar mengulang n kalifor _ in range(n):

Kalau kamu mendapati dirimu menulis for i in range(len(sesuatu)), hampir selalu ada satu baris dari tabel di atas yang lebih tepat.

Latihan: punya list nama siswa dan list nilainya. Cetak daftar bernomor, tandai siswa dengan nilai tertinggi, dan tampilkan rata-rata kelas di baris terakhir.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.