Kursus Python / Mengulang data dengan for, range, enumerate, dan zip
Loop for memproses unsur dari objek yang dapat diiterasi. Iterasikan nilai secara langsung jika hanya nilainya yang diperlukan, gunakan enumerate() untuk nomor urut, dan gunakan zip() untuk membaca beberapa kumpulan yang saling berhubungan.
Iterasikan nilai atau rentang bilangan
Loop Python tidak terbatas pada menaikkan indeks list secara manual. List dan string dapat diiterasi langsung. range(start, stop, step) memberikan rentang dengan batas stop yang tidak disertakan. Langkah negatif membuat urutan menurun; arah langkah harus sesuai dengan posisi awal dan batas.
for value in range(1, 4):
print(value)
Contoh tersebut menampilkan 1, 2, dan 3 pada tiga baris. Nilai 4 tidak disertakan. range bukan list yang sudah berisi seluruh bilangan; ia menyimpan representasi rentang. Gunakan list(...) jika ingin melihat semua nilai dari rentang pendek, bukan sebagai syarat untuk mengiterasikannya.
Referensi tipe range menjelaskan batas dan langkahnya. Langkah nol tidak sah dan menghasilkan ValueError. Jika awal, batas, dan arah tidak menghasilkan satu nilai pun, loop berjalan nol kali.
Pasangkan nama, jumlah, dan nomor tampilan
Simpan kode lengkap berikut sebagai for_loop.py dengan encoding UTF-8. Gunakan Python 3.12 atau lebih baru dan jalankan python for_loop.py pada terminal lingkungan proyek. Data sudah tersedia dalam dua list, tanpa paket atau berkas tambahan.
names = ["coffee", "lunch", "bus"]
amounts = [3500, 8000, 2500]
for number, (name, amount) in enumerate(zip(names, amounts, strict=True), start=1):
print(number, name, amount)
print(list(range(5, 0, -2)))
Keluaran yang diharapkan:
1 coffee 3500
2 lunch 8000
3 bus 2500
[5, 3, 1]
zip() membuat pasangan dari unsur pada posisi yang sama, misalnya ("coffee", 3500). enumerate(..., start=1) menambahkan nomor, sehingga target number, (name, amount) menerima nomor dan dua unsur pasangan. Pola bersarang ini menggunakan aturan pada latihan tuple dan unpacking.
Baris terakhir membuat list dari rentang menurun. Mulai dari 5, langkah -2 memberikan 5, 3, lalu 1; batas 0 tidak disertakan.
Periksa nomor urut dan persyaratan panjang
start=1 mengubah penghitung tampilan, bukan indeks list asli. Unsur pertama names tetap berada pada indeks nol. Karena nilai sudah tersedia melalui unpacking, gunakan name dan amount langsung daripada memakai nomor tampilan sebagai indeks sumber.
Tanpa opsi tambahan, zip() berhenti ketika masukan terpendek habis. Jika kedua list wajib memiliki panjang sama, strict=True membuat perbedaan panjang menjadi ValueError alih-alih menghilangkan sisa data secara diam-diam. Opsi ini tersedia sejak Python 3.10, sehingga didukung oleh lingkungan dasar kursus. Dokumentasi fungsi zip menjelaskan perilaku tersebut.
Pemeriksaan strict terjadi saat iterator dikonsumsi. Jika jumlah terakhir hilang, dua pasangan pertama dapat sudah dicetak sebelum kesalahan muncul pada pasangan berikutnya; ini bukan pembatalan otomatis terhadap pekerjaan sebelumnya. Jika seluruh data harus lolos sebelum diproses, validasi panjang list terlebih dahulu atau siapkan hasil pasangan sebelum melakukan tindakan yang memiliki efek samping.
zip() mengembalikan iterator yang dikonsumsi saat diiterasi. Setelah habis, objek iterator yang sama tidak memutar kembali masukan dengan sendirinya. Buat pemanggilan baru jika perlu mengulangi pembacaan dari dua list. Ketika catatan bertambah kompleks, mempertahankan nama dan jumlah sebagai satu catatan dapat mengurangi risiko dua list sejajar menjadi tidak cocok.
Uji batas dan hindari perubahan sumber yang mengejutkan
- Hapus
2500dariamounts. Denganstrict=True, dua baris awal dapat tampil, lalu munculValueError; baris rentang setelah loop tidak dijalankan. - Hilangkan argumen
strict=Trueuntuk membandingkan perilaku. Hanya dua pasangan ditampilkan, kemudian program melanjutkan ke keluaran rentang. Ini tidak berarti pasangan ketiga berhasil diproses. - Kembalikan kedua list dan opsi strict. Ubah hanya batas
range(5, 0, -2)menjadirange(5, -1, -2). Hasil tetap[5, 3, 1]karena batas-1tidak disertakan. Batas-2akan mengizinkan-1muncul. - Pulihkan rentang asli dan jalankan ulang untuk memastikan keempat baris hasil kembali sama.
Menghapus unsur dari list yang sedang diiterasi dapat melewatkan unsur lain saat posisinya bergeser. Kumpulkan perubahan secara terpisah, iterasikan salinan jika sesuai, atau bentuk hasil baru. Untuk masukan kosong, inisialisasi nilai yang diperlukan sesudah loop di luar loop, karena isi loop tidak pernah dijalankan.




