2015-03-27 37 views
8

In Java, ho il seguente ciclo for e sto imparando Python:Come eseguire il conto alla rovescia in ciclo for?

for (int index = last-1; index >= posn; index--) 

mia domanda è semplice e probabilmente ovvia per la maggior parte delle persone che hanno familiarità con Python. Vorrei codificare quel ciclo 'for' in Python. Come posso fare questo?

ho cercato di fare quanto segue:

for index in range(last-1, posn, -1): 

penso che dovrebbe essere range(last-1, posn + 1, -1). Ho ragione?

Sono grato a chiunque, in particolare, che mi spiegherà come capire gli indici funzionano in Python.

+0

Dice 'IndexError: list index out of range' – Jika

+0

a parte: a seconda di ciò che si sta facendo si potrebbe enumerare: 'per i, e in inverso (lista (enumerare (lista_qui))):' dove vorrei contare dall'ultimo elemento ed e sarebbe gli elementi attuali – JGreenwell

+1

@ Jika Quindi guarda gli indici generati dalla gamma. Quindi correggi il tuo codice. – user2864740

risposta

19

La funzione range in Python ha la sintassi:

range(start, end, step)

Ha la stessa sintassi di liste Python in cui la partenza è incluso, ma alla fine è esclusivo.

Quindi, se si desidera contare 5-1, si usa range(5,0,-1) e se si voleva contare last-posn si usa range(last, posn - 1, -1).

2

Prima Consiglierei si può provare l'uso di stampa e osservare l'azione:

for i in range(0, 5, 1): 
    print i 

il risultato:

0 
1 
2 
3 
4 

si può capire il principio di funzionamento. Infatti, l'intervallo di scansione range è compreso tra 0 e 5-1. È uguale a 0 <= i < 5

Quando si capisce veramente il ciclo in Python, penso che sia tempo di tornare al business. Concentriamo il tuo problema.

Si desidera utilizzare un ciclo per DECREMENT in Python. Suggerisco ad esempio un tutorial for-loop.

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

il risultato:

5 
4 
3 
2 
1 

Così si può vedere, è uguale 5 >= i > 0

si desidera implementare il codice Java in Python:

for (int index = last-1; index >= posn; index--) 

Dovrebbe codificare this:

for i in range(last-1, posn-1, -1) 
7

in Python, quando si ha un iterabile, di solito si iterare senza un indice:

letters = 'abcdef' # or a list, tupple or other iterable 
for l in letters: 
    print(l) 

Se è necessario attraversare il iterabile in ordine inverso, si farebbe:

for l in letters[::-1]: 
    print(l) 

quando, per qualsiasi motivo è necessario l'indice, è possibile utilizzare enumerate:

for i, l in enumerate(letters, start=1): #start is 0 by default 
    print(i,l) 

È possibile enumerare in ordine inverso troppo ...

for i, l in enumerate(letters[::-1]) 
    print(i,l) 

In un'altra nota ...

Di solito quando attraversiamo un iterabile lo facciamo applicare la stessa procedura o la funzione di ogni elemento. In questi casi, è meglio utilizzare map:

Se abbiamo bisogno di capitilize ogni lettera:

map(str.upper, letters) 

O ottenere il codice Unicode di ogni lettera:

map(ord, letters) 
Problemi correlati