Mencetak daftar dalam urutan terbalik dengan range()?
Bagaimana anda bisa menghasilkan daftar berikut dengan range()
dalam Python?
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
330
17
Bagaimana anda bisa menghasilkan daftar berikut dengan range()
dalam Python?
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
gunakan
dibalik()
fungsi:It's jauh lebih bermakna.
Update:
Jika anda ingin daftar (sebagai btk menunjuk keluar):
Update:
Jika anda ingin menggunakan hanya
range
untuk mencapai hasil yang sama, anda dapat menggunakan semua parameter.range(start, stop, langkah)
Misalnya, untuk menghasilkan daftar
[5,4,3,2,1,0]
, anda dapat menggunakan berikut:Mungkin kurang intuitif tapi seperti komentar-komentar lagi, ini lebih efisien dan penggunaan yang tepat dari berbagai terbalik untuk daftar.
Gunakan 'range' built-in fungsi. Tanda tangan adalah
range(start, stop, langkah)
. Hal ini menghasilkan urutan yang menghasilkan angka-angka, dimulai denganstart
, dan berakhir jikastop
telah tercapai, tidak termasukberhenti
.Di Python 3, hal ini menghasilkan non-list
range
objek, yang berfungsi secara efektif suka baca-saja daftar (tapi menggunakan cara yang kurang memori, terutama untuk rentang besar).Anda bisa menggunakan'range(10)[::-1]
yang adalah hal yang sama seperti'range(9, -1, -1)
dan bisa dibilang lebih mudah dibaca (jika anda're akrab dengan umum'sequence[::-1]`Python idiom).Bagi mereka yang tertarik dalam "efisiensi" opsi yang dikumpulkan sejauh ini...
Jaime RGP's jawaban membawa saya ke restart komputer setelah waktu agak "menantang" solusi dari Jason benar-benar mengikuti saran saya sendiri (via komentar). Untuk spare penasaran anda downtime, saya hadir di sini saya hasil (terburuk pertama):
Jason's jawaban (mungkin hanya sebuah perjalanan ke kekuatan daftar pemahaman):
martineau's jawaban (dibaca jika anda sudah familiar dengan extended irisan sintaks):
Michał Šrajer's jawaban (yang diterima, sangat mudah dibaca):
bene's jawaban (pertama, tapi sangat samar pada waktu itu):
Opsi terakhir adalah mudah untuk mengingat menggunakan
range(n-1,-1,-1)
notasi oleh Val Neekman.akan memecahkan masalah ini. Ini akan menampilkan 8 1, -1 berarti terbalik daftar
Tidak masuk akal untuk menggunakan
reverse
karena berbagai metode dapat kembali terbalik daftar.Bila anda memiliki iterasi n item dan ingin mengganti urutan daftar dikembalikan oleh
range(start, stop, langkah)
anda harus menggunakan ketiga parameter jangkauan yang mengidentifikasilangkah
dan set ke-1
, parameter lain yang harus disesuaikan:-1
(it's sebelumnya nilaistop - 1
,stop
itu sama dengan0
).n-1
.Sehingga setara dengan range(n) dalam urutan terbalik akan sama:
Readibility samping,
dibalik(range(n))
tampaknya lebih cepat darirange(n)[::-1]
.Hanya jika ada yang bertanya-tanya :)
Persyaratan dalam pertanyaan ini panggilan untuk
daftar
bilangan bulat dari ukuran 10 menurun order. Jadi, let's menghasilkan daftar di python.Sangat sering ditanya pertanyaan adalah apakah
range(9, -1, -1)
lebih baik daridibalik(range(10))
di Python 3? Orang-orang yang telah bekerja dalam bahasa lain dengan iterator segera cenderung berpikir bahwa dibalik() harus cache semua nilai-nilai dan kemudian kembali dalam urutan terbalik. Masalahnya adalah bahwa Python'sterbalik()
operator doesn't bekerja jika objek hanya sebuah iterator. Objek harus memiliki salah satu dari berikut dua untuk terbalik() untuk bekerja:len()
dan integer indeks melalui[]
__dibalik__()
metode yang dilaksanakan.Jika anda mencoba untuk menggunakan dibalik() pada objek yang telah ada di atas maka anda akan mendapatkan:
Jadi singkatnya, Python's
terbalik()
ini hanya dimaksudkan pada array seperti benda-benda dan sehingga harus memiliki kinerja yang sama seperti iterasi ke depan.Tetapi apa yang tentang
range()
? Isn't itu generator? Di Python 3 ini adalah generator tapi dibungkus dalam class yang mengimplementasikan kedua di atas. Jadirange(100000)
doesn't memakan banyak memori, tetapi masih mendukung efisien pengindeksan dan membalikkan.Jadi, dalam ringkasan, anda dapat menggunakan
dibalik(range(10))
tanpa memukul pada kinerja.Anda dapat melakukan pencetakan reverse angka dengan range() BIF Seperti ,
Output yang akan [10,9,8,7,6,5,4,3,2,1]
range() - kisaran ( awal , akhir , increment/decrement ) di mana mulai inklusif , end eksklusif dan kenaikan dapat berupa angka-angka dan berperilaku seperti langkah
saya percaya ini bisa membantu,
di bawah ini adalah Penggunaan:
Menggunakan tanpa [::-1] atau terbalik -
Misalkan anda memiliki daftar panggilan itu a={1,2,3,4,5} Sekarang jika anda ingin mencetak daftar secara terbalik maka cukup menggunakan kode berikut.
Aku tahu kau ditanya dengan menggunakan rentang tapi sudah dijawab.
Anda don't perlu untuk menggunakan berbagai fungsi, anda hanya dapat melakukan daftar[::-1] yang harus kembali daftar dalam urutan terbalik dengan cepat, tanpa menggunakan bahan tambahan.
Adalah bentuk yang benar. Jika anda menggunakan
anda tidak akan mendapatkan 0 kasus. Sebagai contoh, katakanlah anda 10 isn't angka ajaib dan variabel anda're untuk menggunakan lookup mulai dari terbalik. Jika anda n case 0, terbalik(range(0)) tidak akan mengeksekusi yang salah jika anda kebetulan memiliki satu objek dalam indeks nol.