2009-05-15 60 views
153

Estoy intentando hacer un ciclo de 100 a 0. ¿Cómo hago esto en Python?¿Retroceder utilizando índices en Python?

for i in range (100,0) no funciona.

+2

Por cierto, es probable que desee hacer un ciclo de 99 a 0, y raramente de 100 a 0. Esto afecta las respuestas. –

Respuesta

236

Pruebe range(100,-1,-1), el tercer argumento es el incremento a utilizar (documentado here).

+4

también puede usar xrange en lugar de rango si no necesita la lista de números, pero esta es la respuesta correcta. –

+2

También necesito usar esto para eliminar elementos de la colección, así que es por eso que solo quería los índices. –

+2

¿Cuál es el segundo argumento? – deltanine

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

y alguna solución ligeramente más largo (y más lento):

for i in reversed(range(101)) 

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

En mi opinión, esta es la más legible:

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

Esto es mejor que la respuesta aceptada ya que en realidad no asigna todos los números en la memoria (en Python 3 la respuesta aceptada tampoco), además es más obvio lo que está sucediendo. – Blixt

+5

Python antes 2.6 asigna todos los números, porque invertido no tiene manera de decirle al xrange que vaya hacia atrás ... (Desde Python 2.6 llama __reversed __().) –

+0

@Triptych gracias prefiero esta solución – zulucoda

14

general en Python, puede utilizar los índices negativos empezar desde la parte de atrás:

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

Resultado:

50 
40 
30 
20 
10 
4

Otra solución:

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

Resultado:

10 
9 
8 
7 
6 
5 
4 
3 
2 
1 

Consejo: Si utiliza este método para contar hacia atrás índices en una lista, que va a querer -1 del valor 'y', ya que sus índices de lista comenzarán en 0.

0

He intentado esto en uno de los ejercicios de marcha atrás (Codeacademy caracteres en una cadena sin usar ni revertido :: -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

corto y dulce. Esta fue mi solución al hacer el curso codeAcademy. Imprime una cadena en orden de rev.

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

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

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

¡Bienvenido a Stack Overflow! Considere editar su publicación para agregar más explicaciones sobre lo que hace su código y por qué resolverá el problema. Una respuesta que solo contenga código (incluso si funciona) generalmente no ayudará al OP a entender su problema. – SuperBiasedMan

+0

Te das cuenta de que el uso de 'sorted' almacenará innecesariamente toda la lista en la memoria, ¿verdad? Esto es un desperdicio y no es factible para 'a' grande. –

1

Por qué su código no funcionaba

Usted código for i in range (100, 0) está muy bien, excepto

el tercer parámetro (step) es por defecto +1. Por lo tanto, debe especificar el 3er parámetro al rango() como -1 para retroceder.

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

Nota: Esto incluye 100 & 0 en la salida.

Hay varias formas.

mejor manera

Para Pythonic manera, comprobar PEP 0322.

Este es el ejemplo python3 pythonic para imprimir de 100 a 0 (incluidos 100 & 0).

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

Siempre se puede hacer aumentar la amplitud y restar de una variable en su caso 100 - i donde i in range(0, 101).

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

La respuesta simple para resolver su problema podría ser así:

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

mejor manera es utilizar

Caso 1. Cuando sabemos que tenemos cierto número de iteraciones que la función gama simplemente puede usar la función de rango como este

Antes de usar el rango() permítanme dar una breve descripción sobre el rango()

Se necesitan tres parámetros primero está empezando número segundo número de la última a menos que éste tercera diferencia entre cada iteración

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

Caso 2 cuando tenemos lista y queremos a la lista de repetir en orden inverso

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