Saya mencoba untuk mengulang dari 100 menjadi 0. Bagaimana saya melakukan ini dengan Python?
for i in range (100,0)
tidak bekerja
range(100)[::-1]
(yang secara otomatis diterjemahkan ke range(9, -1, -1)
) - Diuji dalam python 3.7
Saya mencoba untuk mengulang dari 100 menjadi 0. Bagaimana saya melakukan ini dengan Python?
for i in range (100,0)
tidak bekerja
range(100)[::-1]
(yang secara otomatis diterjemahkan ke range(9, -1, -1)
) - Diuji dalam python 3.7
Jawaban:
Coba range(100,-1,-1)
, argumen ke-3 adalah selisih untuk digunakan (didokumentasikan di sini ).
("rentang" opsi, mulai, berhenti, langkah didokumentasikan di sini )
Menurut pendapat saya, ini yang paling mudah dibaca:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
untuk xrange(len(list)-1:-1:-1)
; yang terakhir hanya terlihat aneh dengan begitu banyak -1
.
range
berperilaku dengan cara yang sama seperti xrange
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.
Mengapa kode Anda tidak berfungsi
Kode Anda for i in range (100, 0)
baik-baik saja, kecuali
parameter ketiga ( step
) secara default +1
. Jadi, Anda harus menentukan parameter ke-3 untuk rentang () -1
untuk mundur.
for i in range(100, -1, -1):
print(i)
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).
for i in reversed(range(101)):
print(i)
reversed
dalam PEP-322 menyesatkan, sehingga harus dicatat bahwa reversed
akan memanggil __reversed__
iterable dan mengembalikan hasilnya, dan untuk range
objek ini adalah range_object
iterator yang dievaluasi malas . Singkatnya: menggunakan metode ini evaluasi masih malas.
Jawaban sederhana untuk menyelesaikan masalah Anda bisa seperti ini:
for i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
bekerja
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-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Saya ingin mengulang dua daftar mundur pada saat yang sama sehingga saya memerlukan indeks negatif. Ini solusi saya:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Hasil:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh oke baca salah pertanyaan, saya kira ini tentang mundur dalam array? jika demikian, saya punya ini:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
dan time
tidak relevan untuk pertanyaan awal.
Anda juga dapat membuat mekanisme balik kustom dengan python. Yang dapat digunakan di mana saja untuk mengulang iterable mundur
class Reverse:
"""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:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
tidak akan perlu menyimpan seluruh daftar dalam memori, kan? Ini boros dan tidak layak untuk ukuran besar a
.