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.
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.
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 () -1untuk 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)
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.
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])
globaldan timetidak 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
sortedtidak akan perlu menyimpan seluruh daftar dalam memori, kan? Ini boros dan tidak layak untuk ukuran besar a.