For Loop Lanjutan di Python
Naik level dari for dasar: range(), enumerate(), zip(), break/continue, dan nested loop untuk mengolah data berpasangan.
Analogi: absen kelas satu per satu
Bayangkan guru mengabsen 30 murid. Ia tidak perlu menebak berapa murid yang ada, ia punya daftarnya dan memanggil satu per satu sampai habis. Itulah for: untuk setiap item dalam kumpulan yang sudah jelas, lakukan sesuatu.
Modul ini membahas senjata lanjutan dari for: cara membuat urutan angka dengan range(), melacak nomor urut dengan enumerate(), menggabungkan dua list dengan zip(), mengendalikan loop dengan break/continue, dan loop di dalam loop.
Kenapa konsep ini ada?
Loop dasar for nama in daftar: cukup untuk banyak hal, tapi data nyata jarang sesederhana itu. Kadang kamu butuh nomor barisnya (baris ke berapa yang error?), kadang dua kolom harus diproses berpasangan (nama dan harga), kadang kamu ingin berhenti lebih awal saat sudah ketemu yang dicari (hemat waktu untuk data besar). Fitur-fitur di modul ini lahir untuk kebutuhan praktis itu.
range(): membuat urutan angka
# range(stop): 0 sampai stop-1
for i in range(3):
print(i) # 0, 1, 2
# range(start, stop)
for i in range(2, 5):
print(i) # 2, 3, 4
# range(start, stop, step)
for i in range(0, 10, 3):
print(i) # 0, 3, 6, 9Catatan teknis:
range()itu malas (lazy): ia tidak membuat list raksasa di memori, melainkan menghasilkan angka satu per satu.range(1000000)tetap ringan, sedangkanlist(range(1000000))memakan memori besar.
enumerate(): item plus nomor urutnya
buah = ["apel", "mangga", "jeruk"]
for nomor, nama in enumerate(buah):
print(nomor, nama)
# 0 apel
# 1 mangga
# 2 jeruk
# mulai dari 1 kalau mau
for nomor, nama in enumerate(buah, start=1):
print(nomor, nama)zip(): menggabungkan dua list berpasangan
nama = ["Rina", "Budi", "Sari"]
nilai = [85, 70, 92]
for n, s in zip(nama, nilai):
print(n, "dapat nilai", s)
# Rina dapat nilai 85
# Budi dapat nilai 70
# Sari dapat nilai 92break dan continue: mengendalikan loop
# break: berhenti total saat ketemu yang dicari
for angka in [3, 7, 9, 12, 15]:
if angka > 10:
print("Ketemu:", angka)
break
print("cek", angka)
# continue: lewati iterasi ini, lanjut ke berikutnya
for angka in [3, -2, 7, -5, 9]:
if angka < 0:
continue # lewati angka negatif
print("proses", angka)Nested loop: loop di dalam loop
# tabel perkalian kecil
for baris in range(1, 4):
for kolom in range(1, 4):
print(baris, "x", kolom, "=", baris * kolom)Contoh 1: laporan penjualan berpasangan
produk = ["Kopi", "Teh", "Roti"]
harga = [15000, 8000, 12000]
terjual = [20, 35, 12]
print("LAPORAN HARIAN")
for i, (p, h, t) in enumerate(zip(produk, harga, terjual), start=1):
omzet = h * t
print(i, p, "| terjual:", t, "| omzet: Rp", omzet)Satu loop memproses tiga list sekaligus, lengkap dengan nomor urut. Tanpa zip dan enumerate, kode ini butuh index manual yang rawan salah.
Contoh 2: cari data rusak lalu berhenti
data_umur = [25, 30, -5, 22, 41] # ada satu yang mustahil
for posisi, umur in enumerate(data_umur):
if umur < 0:
print("Data rusak di baris", posisi, ":", umur)
break # sudah ketemu, tidak perlu cek sisanya
else:
print("Semua data bersih")Catatan teknis:
forpunya klausaelseyang jarang diketahui: blokelsejalan kalau loop selesai tanpabreak. Cocok untuk pola "cari sesuatu, kalau tidak ketemu lakukan X".
Kesalahan umum pemula
SALAH: mengubah list saat diiterasi
angka = [1, 2, 3, 4]
for a in angka:
if a % 2 == 0:
angka.remove(a) # item terlewat, hasil tidak terduga!BENAR: buat list baru atau iterasi salinannya
angka = [1, 2, 3, 4]
ganjil = [a for a in angka if a % 2 == 1]
print(ganjil) # [1, 3]SALAH: mengira range(5) berisi angka 1 sampai 5
for i in range(5):
print(i) # 0,1,2,3,4 BUKAN 1,2,3,4,5BENAR: ingat stop itu eksklusif, mulai dari 1 bila perlu
for i in range(1, 6):
print(i) # 1,2,3,4,5SALAH: break/continue di indentasi yang salah
for a in [1, 2, 3]:
if a == 2:
print("dua")
break # IndentationError: di luar loop!BENAR: break harus di dalam blok loop
for a in [1, 2, 3]:
if a == 2:
print("dua")
breakTantangan
Laporan Stok Berpasangan
Diberi dua list: nama barang dan jumlah stok. Pakai zip dan enumerate untuk mencetak nomor, nama, dan status ('Stok aman' jika >= 10, 'Stok menipis!' jika < 10). Lewati barang yang stoknya 0 dengan continue.