BTW, Anda mungkin ingin mengulang dari 99 menjadi 0, dan jarang dari 100 menjadi 0. Ini memengaruhi jawaban.
Acumenus
1
@Acumenus Itulah yang saya cari ketika sampai di sini. Dan sebagai catatan solusinya adalah dengan hanya menulis: range(100)[::-1](yang secara otomatis diterjemahkan ke range(9, -1, -1)) - Diuji dalam python 3.7
Hassan
Jawaban:
399
Coba range(100,-1,-1), argumen ke-3 adalah selisih untuk digunakan (didokumentasikan di sini ).
("rentang" opsi, mulai, berhenti, langkah didokumentasikan di sini )
Saya juga perlu menggunakan ini untuk menghapus item dari koleksi, jadi itu sebabnya hanya ingin indeks.
Joan Venge
2
argumen kedua kurang dari nilai akhir. jadi jika Anda meletakkan -1 maka rentang berhenti pada 0, jika Anda menempatkan -5, rentang berhenti di -4 (untuk selisih -1)
mulllhausen
200
Menurut pendapat saya, ini yang paling mudah dibaca:
Ini lebih baik daripada jawaban yang diterima karena tidak benar-benar mengalokasikan semua angka dalam memori (dalam Python 3 jawaban yang diterima tidak akan baik), ditambah lebih jelas apa yang terjadi.
Blixt
5
Python sebelum 2.6 tidak mengalokasikan semua angka, karena dibalik tidak memiliki cara untuk memberitahu xrange untuk mundur ... (Sejak Python 2.6 ia memanggil __reversed __ ().)
Robert Siemer
Saya lebih suka reversed(xrange(len(list)))untuk xrange(len(list)-1:-1:-1); yang terakhir hanya terlihat aneh dengan begitu banyak -1.
musiphil
1
xrange () tidak tersedia lagi dalam Python 3
Chris Graf
1
Dalam Python 3, rangeberperilaku dengan cara yang sama seperti xrangedi 2.7. @hacksoi tergantung pada use case tetapi katakanlah Anda mengulangi mundur dalam buffer besar, katakanlah itu 10 MB, kemudian membuat indeks terbalik dimuka akan mengambil detik dan menggunakan lebih dari 50 MB memori. Menggunakan generator yang dibalik akan membutuhkan milidetik dan hanya menghabiskan beberapa byte memori.
Blixt
34
for i in range(100,-1,-1)
dan beberapa solusi yang sedikit lebih lama (dan lebih lambat):
for i in reversed(range(101))for i in range(101)[::-1]
ya, PEP-322 memberi kita cara yang jelas dan paling tidak rawan kesalahan untuk membalikkan iterasi.
Allen Shen
1
Ini bagus. Rekomendasi tentang bagaimana menerapkan reverseddalam PEP-322 menyesatkan, sehingga harus dicatat bahwa reversedakan memanggil __reversed__iterable dan mengembalikan hasilnya, dan untuk rangeobjek ini adalah range_objectiterator yang dievaluasi malas . Singkatnya: menggunakan metode ini evaluasi masih malas.
Ruzihm
5
Solusi lain:
z =10for x in range (z):
y = z-x
print y
Hasil:
10987654321
Kiat: Jika Anda menggunakan metode ini untuk menghitung kembali indeks dalam daftar, Anda ingin -1 dari nilai 'y', karena indeks daftar Anda akan mulai dari 0.
Saya mencoba ini di salah satu latihan codeacademy (membalikkan karakter dalam string tanpa menggunakan terbalik atau :: -1)
def reverse(text):
chars=[]
l = len(text)
last = l-1for i in range (l):
chars.append(text[last])
last-=1
result=""for c in chars:
result += c
return result
print reverse('hola')
Sepertinya jawaban Anda adalah salin dari tes yang Anda buat. Cobalah memposting contoh minimal: penggunaan globaldan timetidak relevan untuk pertanyaan awal.
Michael Doubez
-1
Anda juga dapat membuat mekanisme balik kustom dengan python. Yang dapat digunakan di mana saja untuk mengulang iterable mundur
classReverse:"""Iterator for looping over a sequence backwards"""def __init__(self, seq):
self.seq = seq
self.index = len(seq)def __iter__(self):return self
def __next__(self):if self.index ==0:raiseStopIteration
self.index -=1return self.seq[self.index]>>> d =[1,2,3,4,5]>>>for i inReverse(d):...print(i)...54321
Selamat Datang di Stack Overflow! Silakan pertimbangkan untuk mengedit posting Anda untuk menambahkan lebih banyak penjelasan tentang apa yang kode Anda lakukan dan mengapa itu akan menyelesaikan masalah. Jawaban yang sebagian besar hanya berisi kode (bahkan jika itu berfungsi) biasanya tidak akan membantu OP untuk memahami masalah mereka.
SuperBiasedMan
Anda menyadari bahwa menggunakan sortedtidak akan perlu menyimpan seluruh daftar dalam memori, kan? Ini boros dan tidak layak untuk ukuran besar a.
range(100)[::-1]
(yang secara otomatis diterjemahkan kerange(9, -1, -1)
) - Diuji dalam python 3.7Jawaban:
Coba
range(100,-1,-1)
, argumen ke-3 adalah selisih untuk digunakan (didokumentasikan di sini ).("rentang" opsi, mulai, berhenti, langkah didokumentasikan di sini )
sumber
Menurut pendapat saya, ini yang paling mudah dibaca:
sumber
reversed(xrange(len(list)))
untukxrange(len(list)-1:-1:-1)
; yang terakhir hanya terlihat aneh dengan begitu banyak-1
.range
berperilaku dengan cara yang sama sepertixrange
di 2.7. @hacksoi tergantung pada use case tetapi katakanlah Anda mengulangi mundur dalam buffer besar, katakanlah itu 10 MB, kemudian membuat indeks terbalik dimuka akan mengambil detik dan menggunakan lebih dari 50 MB memori. Menggunakan generator yang dibalik akan membutuhkan milidetik dan hanya menghabiskan beberapa byte memori.dan beberapa solusi yang sedikit lebih lama (dan lebih lambat):
sumber
Secara umum dengan Python, Anda bisa menggunakan indeks negatif untuk memulai dari belakang:
Hasil:
sumber
Mengapa kode Anda tidak berfungsi
Kode Anda
for i in range (100, 0)
baik-baik saja, kecualiparameter ketiga (
step
) secara default+1
. Jadi, Anda harus menentukan parameter ke-3 untuk rentang ()-1
untuk mundur.CATATAN: Ini termasuk 100 & 0 dalam output.
Ada beberapa cara.
Cara yang lebih baik
Untuk cara pythonic, periksa PEP 0322 .
Ini adalah contoh python Python3 untuk mencetak dari 100 ke 0 (termasuk 100 & 0).
sumber
reversed
dalam PEP-322 menyesatkan, sehingga harus dicatat bahwareversed
akan memanggil__reversed__
iterable dan mengembalikan hasilnya, dan untukrange
objek ini adalahrange_object
iterator yang dievaluasi malas . Singkatnya: menggunakan metode ini evaluasi masih malas.Solusi lain:
Hasil:
Kiat: Jika Anda menggunakan metode ini untuk menghitung kembali indeks dalam daftar, Anda ingin -1 dari nilai 'y', karena indeks daftar Anda akan mulai dari 0.
sumber
Jawaban sederhana untuk menyelesaikan masalah Anda bisa seperti ini:
sumber
for var in range(10,-1,-1)
bekerjasumber
Pendek dan manis. Ini adalah solusi saya ketika melakukan kursus codeAcademy. Mencetak string dengan urutan rev.
sumber
Anda selalu dapat melakukan peningkatan rentang dan kurangi dari variabel dalam kasus Anda di
100 - i
manai in range( 0, 101 )
.sumber
Saya mencoba ini di salah satu latihan codeacademy (membalikkan karakter dalam string tanpa menggunakan terbalik atau :: -1)
sumber
Saya ingin mengulang dua daftar mundur pada saat yang sama sehingga saya memerlukan indeks negatif. Ini solusi saya:
Hasil:
sumber
Oh oke baca salah pertanyaan, saya kira ini tentang mundur dalam array? jika demikian, saya punya ini:
sumber
global
dantime
tidak relevan untuk pertanyaan awal.Anda juga dapat membuat mekanisme balik kustom dengan python. Yang dapat digunakan di mana saja untuk mengulang iterable mundur
sumber
sumber
sorted
tidak akan perlu menyimpan seluruh daftar dalam memori, kan? Ini boros dan tidak layak untuk ukuran besara
.