Bagaimana anda bisa menghasilkan daftar berikut dengan range()
dalam Python?
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
gunakan dibalik()
fungsi:
reversed(range(10))
It's jauh lebih bermakna.
Update:
Jika anda ingin daftar (sebagai btk menunjuk keluar):
list(reversed(range(10)))
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:
range(5, -1, -1)
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 dengan start
, dan berakhir jika stop
telah tercapai, tidak termasuk berhenti
.
>>> range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(-2, 6, 2)
[-2, 0, 2, 4]
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).
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):
$ python -m timeit "[9-i for i in range(10)]"
1000000 loops, best of 3: 1.54 usec per loop
martineau's jawaban (dibaca jika anda sudah familiar dengan extended irisan sintaks):
$ python -m timeit "range(10)[::-1]"
1000000 loops, best of 3: 0.743 usec per loop
Michał Šrajer's jawaban (yang diterima, sangat mudah dibaca):
$ python -m timeit "reversed(range(10))"
1000000 loops, best of 3: 0.538 usec per loop
bene's jawaban (pertama, tapi sangat samar pada waktu itu):
$ python -m timeit "range(9,-1,-1)"
1000000 loops, best of 3: 0.401 usec per loop
Opsi terakhir adalah mudah untuk mengingat menggunakan range(n-1,-1,-1)
notasi oleh Val Neekman.
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 mengidentifikasi langkah
dan set ke -1
, parameter lain yang harus disesuaikan:
-1
(it's sebelumnya nilai stop - 1
, stop
itu sama dengan 0
).n-1
.Sehingga setara dengan range(n) dalam urutan terbalik akan sama:
n = 10
print range(n-1,-1,-1)
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Readibility samping, dibalik(range(n))
tampaknya lebih cepat dari range(n)[::-1]
.
$ python -m timeit "reversed(range(1000000000))"
1000000 loops, best of 3: 0.598 usec per loop
$ python -m timeit "range(1000000000)[::-1]"
1000000 loops, best of 3: 0.945 usec per loop
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.
# This meets the requirement.
# But it is a bit harder to wrap one's head around this. right?
>>> range(10-1, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# let's find something that is a bit more self-explanatory. Sounds good?
# ----------------------------------------------------
# This returns a list in ascending order.
# Opposite of what the requirement called for.
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# This returns an iterator in descending order.
# Doesn't meet the requirement as it is not a list.
>>> reversed(range(10))
<listreverseiterator object at 0x10e14e090>
# This returns a list in descending order and meets the requirement
>>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Sangat sering ditanya pertanyaan adalah apakah range(9, -1, -1)
lebih baik dari dibalik(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's terbalik()
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:
>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible
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. Jadi range(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 ,
for number in range ( 10 , 0 , -1 ) :
print ( number )
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,
range(5)[::-1]
di bawah ini adalah Penggunaan:
for i in range(5)[::-1]:
print i
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.
a.reverse
for i in a:
print(i)
Aku tahu kau ditanya dengan menggunakan rentang tapi sudah dijawab.
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Adalah bentuk yang benar. Jika anda menggunakan
reversed(range(10))
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.