Alat untuk menghasilkan angka
range() hanya melakukan satu hal: menghasilkan deret integer. Ia pasangan andalan for loop saat kamu perlu mengulang sejumlah kali tertentu atau menelusuri sebuah interval angka.
Bentuk paling sederhana menerima satu argumen, yaitu nilai stop:
Output:
0
1
2
3
4
Dua detail yang sering menjebak pemula:
- Hitungan dimulai dari 0.
range(5)memberimu lima angka, dimulai dari 0. - Nilai stop tidak termasuk.
range(5)berhenti sebelum 5, jadi 5 sendiri tidak ikut.
Aturan ini konsisten di seluruh operasi slicing, indeks, dan range di Python. Begitu kamu terbiasa dengan "stop tidak termasuk", hal ini tidak akan menjebakmu lagi.
Tiga bentuk
range() menerima satu, dua, atau tiga argumen:
Step adalah besar setiap lompatan. range(0, 20, 4) menghasilkan setiap angka keempat. Ingat itu saat kamu butuh "selang-seling satu item" atau "setiap sampel kesepuluh".
Menghitung mundur
Step bisa bernilai negatif, sehingga kamu bisa menghitung mundur:
Sekali lagi, stop tidak termasuk: range(10, 0, -1) berhenti sebelum 0, bukan di 0. Untuk menyertakan 0, jadikan stop-nya -1:
range bersifat lazy
Di Python 3, range() tidak membangun list angka di memori. Ia mengembalikan objek range ringan yang menghasilkan angka satu per satu, sesuai permintaan. Karena itu kamu bisa menulis:
"Range" berisi semiliar angka nyaris tidak memakan memori. Angkanya dibuat saat loop memintanya.
Kalau kamu memang butuh list berisi angka-angka itu, karena ingin mengubahnya, mengurutkannya, atau mengakses indeksnya lebih dari sekadar dasar, konversi secara eksplisit:
Hampir selalu, kamu tidak butuh list-nya. for i in range(...) bisa langsung dipakai.
Pola yang umum
Beberapa resep yang akan terus kamu pakai:
Melakukan sesuatu sebanyak n kali.
_ adalah konvensi yang berarti "aku tidak peduli nilai ini". Python tidak mewajibkannya, tapi setiap pembaca akan memahami maksudnya.
Mengakses sebuah deret lewat indeks.
Utamakan enumerate() daripada range(len(...)), tapi kalau kamu memang hanya butuh indeksnya:
Tetap saja, kebanyakan waktu enumerate(items) lebih rapi.
Menelusuri elemen secara selang-seling.
Kode itu mencetak a, c, e. Tapi untuk slicing sederhana, sintaks slicing bahkan lebih langsung: items[::2].
Membuat list angka dengan cepat.
Itu adalah list comprehension, yang dibahas nanti, tapi range yang menyediakan angkanya.
Yang bukan range()
Dua hal tajam yang perlu diketahui:
rangehanya menghasilkan integer. Kalau kamu butuh langkah floating-point (misalnya 0.0 sampai 1.0 dengan kenaikan 0.1), pakainumpy.arangeatau loop dengan penghitungmu sendiri.rangetidak bekerja dengan iterable sembarang. Ia khusus untuk integer. Kalau kamu mencoba memakai "range" pada sebuah list, mungkin yang kamu cari adalahenumerateatau list itu sendiri.
Menyatukan semuanya
Contoh kecil yang memakai beberapa variasi sekaligus:
Dua loop bersarang yang digerakkan range, menghasilkan sebuah tabel. Perhatikan bahwa kedua loop dimulai dari 1, yaitu range(1, 6), karena kita ingin label dari 1 sampai 5.
Masuk ke koleksi
Sekarang kamu sudah melihat kondisi, kedua jenis loop, dan range. Itu sudah cukup alur kontrol untuk mengolah koleksi apa pun. Bab berikutnya: koleksinya sendiri, yaitu list, tuple, set, dan dictionary.
Pertanyaan yang sering diajukan
Apa fungsi range() di Python?
range() menghasilkan deret integer. range(n) memberi 0 sampai n-1. range(start, stop) memberi integer dari start sampai sebelum stop (stop tidak termasuk). range(start, stop, step) memungkinkan kamu memilih besar langkahnya, termasuk langkah negatif untuk menghitung mundur.
Apakah range() membuat list?
Tidak. Di Python 3, range() mengembalikan objek range ringan yang menghasilkan angka sesuai permintaan. Itulah sebabnya range(10**9) langsung jadi: ia tidak benar-benar mengalokasikan semiliar integer. Bungkus dengan list(...) kalau kamu memang butuh list.
Bagaimana cara menghitung mundur dengan range() di Python?
Pakai step negatif: range(10, 0, -1) menghitung 10, 9, 8, ..., 1. Ingat bahwa nilai stop selalu tidak termasuk, jadi untuk menyertakan 0 kamu butuh range(10, -1, -1).