Banyak pekerjaan program adalah pengulangan: cetak setiap item keranjang, periksa setiap baris laporan, jumlahkan setiap angka dalam data. Python menyediakan pernyataan for untuk pekerjaan tersebut, tetapi dengan desain yang berbeda dari bahasa seperti PHP atau C: for Python tidak mengelola counter, melainkan mengambil elemen koleksi satu per satu secara langsung. Pada Chapter ini kita akan mengiterasi berbagai tipe data, membongkar isi dictionary, menyusun nested loop, dan belajar pola iterasi yang dianggap pythonic.

for Mengiterasi Elemen, Bukan Indeks #

Loop variable setelah kata kunci for diikat ke setiap elemen koleksi, satu per satu dari awal hingga akhir. Kita tidak perlu menghitung panjang koleksi ataupun mengakses elemen lewat indeks.

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

for nama_buah in buah:
    print("Buah:", nama_buah)

kode_warna = ("merah", "hijau", "biru")

for warna in kode_warna:
    print("Warna:", warna)

for karakter in "Budi":
    print(karakter)

Output yang Dihasilkan:

text
Buah: apel
Buah: jeruk
Buah: mangga
Warna: merah
Warna: hijau
Warna: biru
B
u
d
i

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 3 (for nama_buah in buah:): interpreter Python mengambil elemen list buah satu per satu; pada tiap putaran, variabel nama_buah diikat ke elemen berikutnya ("apel", lalu "jeruk", lalu "mangga").
  2. Baris 8 (for warna in kode_warna:): mekanisme yang sama bekerja untuk tuple — elemen diambil berurutan tanpa indeks.
  3. Baris 11 (for karakter in "Budi":): string diiterasi per karakter, sehingga huruf B, u, d, i tercetak masing-masing satu baris.

Setelah loop selesai, loop variable tidak hilang — variabel tersebut masih menyimpan elemen terakhir. Nama loop variable sebaiknya deskriptif (nama_buah, bukan sekadar x) karena nama tersebut muncul di seluruh isi blok.

Iterasi Dictionary dengan items() #

Dictionary tidak diiterasi dengan indeks angka. Method items() mengembalikan pasangan key-value, dan dua loop variable dapat dipakai untuk membongkar setiap pasangan langsung.

python
stok = {"apel": 12, "jeruk": 7, "mangga": 0}

for nama, jumlah in stok.items():
    if jumlah > 0:
        print(f"{nama}: {jumlah} tersedia")
    else:
        print(f"{nama}: habis")

Output yang Dihasilkan:

text
apel: 12 tersedia
jeruk: 7 tersedia
mangga: habis

Pada baris for nama, jumlah in stok.items():, setiap pasangan seperti ("apel", 12) dibongkar menjadi variabel nama dan jumlah. Urutan pasangan mengikuti urutan penyisipan — dictionary Python menjamin urutan ini sejak Python 3.7.

Nested for: Membuat Tabel Perkalian #

Loop di dalam loop memungkinkan kita memproses kombinasi dua dimensi. Pada tiap putaran loop luar, loop dalam dijalankan sampai selesai dari awal lagi.

python
for baris in range(1, 4):
    for kolom in range(1, 4):
        print(f"{baris} x {kolom} = {baris * kolom}", end="\t")
    print()

Output yang Dihasilkan:

text
1 x 1 = 1	1 x 2 = 2	1 x 3 = 3	
2 x 1 = 2	2 x 2 = 4	2 x 3 = 6	
3 x 1 = 3	3 x 2 = 6	3 x 3 = 9	

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 1 (for baris in range(1, 4):): loop luar mengambil nilai 1, 2, 3 — kita bahas fungsi range() tuntas pada Chapter range().
  2. Baris 2 (for kolom in range(1, 4):): untuk tiap nilai baris, loop dalam berjalan penuh tiga kali dengan kolom bernilai 1, 2, 3.
  3. Baris 3 (print(..., end="\t")): argument end="\t" mengganti baris baru bawaan dengan karakter tab, sehingga tiga hasil berjajar dalam satu baris.
  4. Baris 4 (print()): setelah loop dalam selesai, print() tanpa argument mencetak baris baru sebelum baris berikutnya.

Total iterasi adalah 3 × 3 = 9 kombinasi — persis isi tabel perkalian 1 sampai 3.

Butuh Nomor Urut? enumerate, Bukan range(len(…)) #

Pemula sering menulis for i in range(len(kota)) hanya untuk mendapatkan nomor urut. Kombinasi range() dan len() mengharuskan kita mengakses elemen lewat indeks kota[i]. Fungsi built-in enumerate() memberikan nomor urut dan elemen sekaligus:

python
kota = ["Jakarta", "Bandung", "Surabaya"]

# Kurang pythonic: mengakses elemen lewat indeks
for i in range(len(kota)):
    print(f"{i + 1}. {kota[i]}")

# Pythonic: iterasi langsung dengan nomor urut dari enumerate
for nomor, nama_kota in enumerate(kota, start=1):
    print(f"{nomor}. {nama_kota}")

Output yang Dihasilkan:

text
1. Jakarta
2. Bandung
3. Surabaya
1. Jakarta
2. Bandung
3. Surabaya

Kedua loop menghasilkan output identik, tetapi versi enumerate() bebas dari indeks manual: bila isi list berubah, versi enumerate() tetap aman. Argument start=1 membuat nomor urut dimulai dari 1; tanpa argument tersebut, enumerate() mulai dari 0.

Kita sudah bisa berjalan menembus koleksi. Selanjutnya, kita pelajari loop yang berjalan selama sebuah kondisi terpenuhi pada Chapter while Loops.