Sto cercando di eseguire il loop da 100 a 0. Come posso farlo in Python?
for i in range (100,0) non funziona
range(100)[::-1](che viene tradotto automaticamente in range(9, -1, -1)) - Testato in python 3.7
Sto cercando di eseguire il loop da 100 a 0. Come posso farlo in Python?
for i in range (100,0) non funziona
range(100)[::-1](che viene tradotto automaticamente in range(9, -1, -1)) - Testato in python 3.7
Risposte:
Prova range(100,-1,-1), il terzo argomento è l'incremento da usare (documentato qui ).
(le opzioni "intervallo", start, stop, step sono documentate qui )
Secondo me, questo è il più leggibile:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))a xrange(len(list)-1:-1:-1); il secondo sembra strano con così tanti -1.
rangesi comporta come xrangenella 2.7. @hacksoi dipende dal caso d'uso, ma supponiamo che tu stia iterando all'indietro in un buffer di grandi dimensioni, diciamo che è 10 MB, quindi la creazione iniziale degli indici inversi richiederebbe secondi e consumerebbe oltre 50 MB di memoria. L'uso di un generatore inverso richiederebbe millisecondi e consumerebbe solo pochi byte di memoria.
Perché il tuo codice non ha funzionato
Il codice for i in range (100, 0)va bene, tranne
il terzo parametro ( step) è di default +1. Quindi devi specificare il 3o parametro su range () per -1fare un passo indietro.
for i in range(100, -1, -1):
print(i)
NOTA: questo include 100 e 0 nell'output.
Ci sono molti modi.
Modo migliore
Per la via pitonica, controlla PEP 0322 .
Questo è l'esempio pythonic di Python3 per stampare da 100 a 0 (inclusi 100 e 0).
for i in reversed(range(101)):
print(i)
reversedin PEP-322 è fuorviante, quindi va notato che reversedchiamerà __reversed__l'iterabile e restituirà il risultato, e per gli rangeoggetti questo è un pigro range_objectiteratore valutato . In breve: usare questo metodo è ancora una valutazione pigra.
for var in range(10,-1,-1) lavori
Ho provato questo in uno degli esercizi di codeacademy (invertire i caratteri in una stringa senza usare reversed né :: -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')
Volevo scorrere indietro di due liste contemporaneamente, quindi avevo bisogno dell'indice negativo. Questa è la mia soluzione:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Risultato:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh okay, leggi la domanda sbagliata, immagino si tratti di tornare indietro in un array? in tal caso, ho questo:
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])
globale timenon è rilevante per la domanda iniziale.
Puoi anche creare un meccanismo inverso personalizzato in Python. Che può essere utilizzato ovunque per il looping di un iterabile all'indietro
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
sortedmemorizzerà inutilmente l'intero elenco in memoria, giusto? Questo è uno spreco e non è fattibile per grandi a.