for loop di Python adalah "for each"
Kalau kamu pernah memakai bahasa bergaya C, for loop di Python akan terlihat berbeda. Tidak ada pola penghitung for (i = 0; i < n; i++). for di Python murni perulangan for each: kamu memberinya sebuah koleksi, dan ia memberimu item satu per satu.
Itu mencetak tiga baris. Python membaca list-nya, mengambil setiap elemen secara bergantian, dan mengikatnya ke color selama badan perulangan berjalan. Saat tidak ada yang tersisa, perulangan selesai.
Perhatikan bentuknya: for <name> in <iterable>: diikuti badan yang diindentasi. Indentasi, titik dua, badan; strukturnya sama dengan if.
Apa saja yang termasuk iterable
Hampir semua hal yang menyimpan deretan nilai. List, tuple, string, range, dict, set, file, dan sebagian besar objek buatan sendiri yang akan kamu buat.
Keseragamannya itulah yang enak: satu sintaks untuk banyak bentuk data.
Menghitung dengan range()
Kalau kamu memang butuh penghitung, misalnya "lakukan ini sepuluh kali" atau "telusuri indeks 0 sampai 9", pakai range():
Itu mencetak 0, 1, 2, 3, 4. range(stop) menghitung dari 0 sampai sebelum stop (tidak termasuk). range(start, stop) memungkinkan kamu mengatur nilai awal, dan range(start, stop, step) memungkinkan kamu mengatur besar langkahnya:
Ada halaman khusus tentang range sebentar lagi, karena fungsi ini layak dipahami sedikit lebih dalam. Untuk sekarang, range(n) memberimu n iterasi yang bernomor 0 sampai n-1.
enumerate di Python: perulangan dengan indeks
Kebutuhan yang umum: "aku ingin indeks dan nilainya sekaligus." Naluri pemula adalah memakai range(len(...)), tapi Python punya alat yang lebih enak:
enumerate() menghasilkan pasangan (index, value). Dua variabel setelah for membongkar pasangan itu menjadi dua nama, index dan color. Jauh lebih rapi daripada:
Kalau kamu ingin mulai menghitung dari 1, bukan 0, berikan start=1:
zip di Python: iterasi dua sequence sekaligus
Kalau kamu punya dua list dengan panjang sama dan ingin memasangkannya:
zip berhenti di sequence yang paling pendek. Kalau kamu ingin perulangan tetap berlanjut dan sisanya diisi None, pakai itertools.zip_longest.
Iterasi pada dict
Dictionary memberimu pilihan tentang apa yang ingin diulang:
Sebagian besar waktu kamu menginginkan .items(): kamu mendapat key dan nilainya sekaligus dalam satu baris yang mudah dibaca.
break dan continue
Kadang kamu ingin berhenti lebih awal atau melewatkan sebuah iterasi.
break langsung keluar dari perulangan:
Begitu angka di atas 6 ditemukan, perulangan berhenti. Item yang tersisa diabaikan.
continue melewatkan sisa iterasi saat ini dan lanjut ke iterasi berikutnya:
Keduanya boleh dipakai, meskipun continue bisa membuat perulangan lebih sulit diikuti kalau jumlahnya lebih dari satu. Sering kali if/else sederhana lebih enak dibaca.
Klausa else pada perulangan
Python punya fitur yang tidak dimiliki kebanyakan bahasa: klausa else pada perulangan. Klausa ini berjalan saat perulangan selesai tanpa mengenai break.
Berguna, tapi awalnya membingungkan. Kamu tidak wajib memakainya: flag boolean di luar perulangan sering lebih jelas bagi pembaca baru.
Mengubah list saat sedang diiterasi
Satu jebakan yang perlu diingat: jangan menambah atau menghapus isi list saat kamu sedang melakukan perulangan di atasnya. Iterasinya jadi bingung indeks mana yang masih valid, dan kamu bisa melewatkan item atau memicu error. Pola yang aman adalah membuat list baru:
Atau, begitu kamu sudah terbiasa, list comprehension melakukan hal yang sama dalam satu baris. Kita akan membahasnya di bab Koleksi.
Contoh kecil dari awal sampai akhir
Gabungkan beberapa hal di atas: baca list, saring, enumerate, cetak:
Berikutnya: while loop
for adalah pilihan yang tepat saat kamu tahu apa yang ingin diiterasi. while adalah pilihan yang tepat saat kamu melakukan perulangan sampai suatu kondisi berubah, dan itulah pembahasan berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara kerja for loop di Python?
for item in sequence: menjalankan badan yang diindentasi sekali untuk setiap elemen di sequence, dengan item berisi setiap nilai secara bergantian. Sequence mencakup list, tuple, string, dict, range, dan objek apa pun yang mendefinisikan iterator.
Apa bedanya break dan continue?
break langsung keluar dari perulangan dan melewatkan semua iterasi yang tersisa. continue melewatkan sisa iterasi saat ini lalu lanjut ke iterasi berikutnya. break untuk "aku sudah selesai"; continue untuk "lewati yang ini."
Bagaimana cara melakukan perulangan dengan indeks di Python?
Bungkus sequence-nya dengan enumerate(...) untuk mendapatkan pasangan (index, value): for i, item in enumerate(items):. Jauh lebih rapi daripada mengurus penghitung sendiri dengan i += 1 di bagian bawah perulangan.