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.
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:
Buah: apel
Buah: jeruk
Buah: mangga
Warna: merah
Warna: hijau
Warna: biru
B
u
d
iMari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 3 (
for nama_buah in buah:): interpreter Python mengambil elemen listbuahsatu per satu; pada tiap putaran, variabelnama_buahdiikat ke elemen berikutnya ("apel", lalu"jeruk", lalu"mangga"). - Baris 8 (
for warna in kode_warna:): mekanisme yang sama bekerja untuk tuple — elemen diambil berurutan tanpa indeks. - Baris 11 (
for karakter in "Budi":): string diiterasi per karakter, sehingga hurufB,u,d,itercetak 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.
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:
apel: 12 tersedia
jeruk: 7 tersedia
mangga: habisPada 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.
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:
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:
- Baris 1 (
for baris in range(1, 4):): loop luar mengambil nilai1,2,3— kita bahas fungsirange()tuntas pada Chapter range(). - Baris 2 (
for kolom in range(1, 4):): untuk tiap nilaibaris, loop dalam berjalan penuh tiga kali dengankolombernilai1,2,3. - Baris 3 (
print(..., end="\t")): argumentend="\t"mengganti baris baru bawaan dengan karakter tab, sehingga tiga hasil berjajar dalam satu baris. - Baris 4 (
print()): setelah loop dalam selesai,print()tanpa argument mencetak baris baru sebelumbarisberikutnya.
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:
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:
1. Jakarta
2. Bandung
3. Surabaya
1. Jakarta
2. Bandung
3. SurabayaKedua 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.