2009-05-15 24 views
153

Sto provando ad eseguire il ciclo da 100 a 0. Come faccio a farlo in Python?Loop indietro usando gli indici in Python?

for i in range (100,0) non funziona.

+2

BTW, probabilmente si desidera eseguire il ciclo da 99 a 0 e raramente da 100 a 0. Ciò influenza le risposte. –

risposta

236

Provare range(100,-1,-1), il terzo argomento è l'incremento da utilizzare (documentato here).

+4

potresti anche usare xrange invece di range se non hai bisogno dell'elenco dei numeri, ma questa è la risposta corretta. –

+2

Anche io devo usare questo per cancellare gli elementi dalla collezione, ecco perché volevo solo gli indici. –

+2

qual è il secondo argomento? – deltanine

24
for i in range(100, -1, -1) 

e alcuni leggermente più lungo (e più lento) Soluzione:

for i in reversed(range(101)) 

for i in range(101)[::-1] 
141

A mio parere, questo è il più leggibile:

for i in reversed(xrange(101)): 
    print i, 
+9

Questo è migliore della risposta accettata poiché in realtà non assegna tutti i numeri in memoria (in Python 3 la risposta accettata non lo sarebbe neanche), in più è più ovvio cosa sta succedendo. – Blixt

+5

Python prima di 2.6 assegna tutti i numeri, perché invertito non ha modo di dire all'arrange di andare indietro ... (Poiché Python 2.6 chiama __verso __().) –

+0

@Triptych preferisco questa soluzione – zulucoda

14

Generalmente in Python, è possibile utilizzare gli indici negativi per iniziare da dietro:

numbers = [10, 20, 30, 40, 50] 
for i in xrange(len(numbers)): 
    print numbers[-i - 1] 

Risultato:

50 
40 
30 
20 
10 
4

Un'altra soluzione:

z = 10 
for x in range (z): 
    y = z-x 
    print y 

Risultato:

10 
9 
8 
7 
6 
5 
4 
3 
2 
1 

Suggerimento: Se si utilizza questo metodo per contare di nuovo gli indici in un elenco, si vuole -1 dal valore "y", poiché gli indici della lista inizieranno a 0.

0

ho provato questo in uno degli esercizi Codecademy (retromarcia caratteri di una stringa senza utilizzare né invertita :: -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') 
2

breve e dolce. Questa era la mia soluzione quando facevo il corso CodeAcademy. Stampa una stringa in ordine di rev.

def reverse(text): 
    string = "" 
    for i in range(len(text)-1,-1,-1): 
     string += text[i] 
    return string  
+3

Oppure 'text [:: - 1]' – PascalVKooten

-1
a = 10 
for i in sorted(range(a), reverse=True): 
    print i 
+0

Benvenuto in Stack Overflow! Ti preghiamo di considerare di modificare il tuo post per aggiungere ulteriori spiegazioni su cosa fa il tuo codice e perché risolverà il problema. Una risposta che per lo più contiene solo codice (anche se funziona) di solito non aiuta l'OP a capire il loro problema. – SuperBiasedMan

+0

Ti rendi conto che l'uso di 'ordinato' memorizzerà inutilmente l'intero elenco in memoria, giusto? Questo è uno spreco e non è fattibile per grandi 'a'. –

1

Perché il codice non ha funzionato

codice È for i in range (100, 0) va bene, tranne

il terzo parametro (step) è di default +1. Quindi devi specificare il 3 ° parametro su range() come -1 per tornare indietro.

for i in range(100, -1, -1): 
    print(i) 

NOTA: Questo include 100 & 0 nell'output.

Esistono diversi modi.

modo migliore

Per modo divinatorio, controllare PEP 0322.

Questo è Python3 esempio pitone per stampare da 100 a 0 (incluso 100 & 0).

for i in reversed(range(101)): 
    print(i) 
1

si può sempre fare crescente gamma e sottrarre da una variabile nel vostro caso in cui 100 - ii in range(0, 101).

for i in range(0, 101): 
    print 100 - i 
1

La risposta più semplice per risolvere il tuo problema potrebbe essere simile a questo:

for i in range(100): 
    i = 100 - i 
    print i 
-1

Il modo migliore è quello di utilizzare la funzione gamma

Caso 1. Quando sappiamo che dobbiamo certo numero di iterazioni che può semplicemente usare la funzione range come questa

Prima di usare range() lasciatemi dare una breve descrizione sul range()

ci vogliono tre parametri prima sta iniziando numero 2 ° ultimo numero tranne questo terza differenza tra ogni iterazione

for step in range(5,-1,-1): 
    print(step) 

Caso 2 quando abbiamo lista e vogliamo iterare lista in ordine inverso

words = ['cat','xat','hat','mat'] 
for word in range(len(words)-1,-1,-1): 
    print(words[word]) 
Problemi correlati