2012-03-28 77 views
19

¿Hay alguna forma de utilizar la función range() con paso -1?Rango de Python() con pasos negativos

E.g. usando range(10, -10) en lugar de los valores entre corchetes a continuación?

es decir la línea siguiente:

for y in range(10,-10) 

En lugar de

for y in [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]: 

Obviamente uno puede hacer esto con otro tipo de bucle más elegante pero el ejemplo range() funcionaría mucho mejor de lo que yo quiero.

Respuesta

30
range(10,-11,-1) 

En general, no cuesta nada para tratar - se puede escribir esto en el intérprete y ver lo que hace.

Como referencia, esto es todo documented también, pero principalmente me gustaría alentarte a no tener miedo de jugar y ver qué pasa. Como puede ver, su intuición fue perfecta.

+5

Tal vez estoy equivocado, sé que no sería la primera vez, no creo que haya necesidad de gruñir. Estoy de acuerdo con que la pregunta oculta poco esfuerzo de investigación; sin embargo, esto podría ser algo difícil de entender para un novato. – bernie

+5

Probablemente tengas razón, es una debilidad. Quizás un estímulo positivo sería mejor ... – Useless

+1

No hay daño, no hay falta. Tener un voto positivo – bernie

5

Sí, mediante la definición de un paso:

for i in range(10, -11, -1): 
    print(i) 
2

Sí, sin embargo, deberá especificar que desea dar un paso atrás configurando el argumento del paso en -1.

Uso:

for y in range(10, -10, -1)

+1

Desafortunadamente no imprime -10 ... va de 10 a -9. –

1

Además de las otras buenas respuestas, hay una alternativa:

for y in reversed(range(-10, 11)): 

consulte la documentación de reversed().

1

Puede observar que la función de rango solo funciona en orden ascendente sin el tercer parámetro. Si usa sin el tercer parámetro en el bloque de rango, no funcionará.

for i in range(10,-10) 

El ciclo anterior no funcionará. Para que funcione el bucle anterior, debe usar el tercer parámetro como número negativo.

for i in range(10,-10,-1) 
Cuestiones relacionadas