¿Imprimir una lista en orden inverso con rango ()?

¿Cómo se puede producir la siguiente lista con range() en Python?

 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

usar la función reversed()

 reversed(range(10)) 

Es mucho más significativo.

Actualizar:

Si quieres que sea una lista (como señala btk):

 list(reversed(range(10))) 

Actualizar:

Si desea usar solo el range para lograr el mismo resultado, puede usar todos sus parámetros. range(start, stop, step)

Por ejemplo, para generar una lista [5,4,3,2,1,0] , puede usar lo siguiente:

 range(5, -1, -1) 

Puede ser menos intuitivo, pero como se menciona en los comentarios, esto es más eficiente y el uso correcto del rango para la lista invertida.

Utilice la función incorporada ‘gama’. La firma es range(start, stop, step) . Esto produce una secuencia que produce números, comenzando con el start y terminando si se ha alcanzado el stop , excluyendo el stop .

 >>> range(9,-1,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> range(-2, 6, 2) [-2, 0, 2, 4] 

En Python 3, esto produce un objeto de range no de lista, que funciona efectivamente como una lista de solo lectura (pero usa mucho menos memoria, particularmente para grandes rangos).

Podría usar range(10)[::-1] que es lo mismo que range(9, -1, -1) y posiblemente más legible (si está familiarizado con la sequence[::-1] común sequence[::-1] Python idioma).

Para aquellos que estén interesados ​​en la “eficiencia” de las opciones recostackdas hasta el momento …

La respuesta de Jaime RGP me llevó a reiniciar mi computadora luego de cronometrar la solución “desafiante” de Jason, literalmente siguiendo mi propia sugerencia (a través de un comentario). Para ahorrarle a los curiosos el tiempo de inactividad, les presento aquí mis resultados (peor primero):

La respuesta de Jason (tal vez solo una excursión al poder de la comprensión de la lista ):

 $ python -m timeit "[9-i for i in range(10)]" 1000000 loops, best of 3: 1.54 usec per loop 

La respuesta de martineau (legible si está familiarizado con la syntax de los segmentos extendidos ):

 $ python -m timeit "range(10)[::-1]" 1000000 loops, best of 3: 0.743 usec per loop 

La respuesta de Michał Šrajer (la aceptada, muy legible):

 $ python -m timeit "reversed(range(10))" 1000000 loops, best of 3: 0.538 usec per loop 

La respuesta de bene (la primera, pero muy incompleta en ese momento ):

 $ python -m timeit "range(9,-1,-1)" 1000000 loops, best of 3: 0.401 usec per loop 

La última opción es fácil de recordar utilizando la notación de range(n-1,-1,-1) de Val Neekman .

 for i in range(8, 0, -1) 

resolverá este problema Saldrá de 8 a 1, y -1 significa una lista invertida

La legibilidad a un lado, reversed(range(n)) parece ser más rápida que el range(n)[::-1] .

 $ python -m timeit "reversed(range(1000000000))" 1000000 loops, best of 3: 0.598 usec per loop $ python -m timeit "range(1000000000)[::-1]" 1000000 loops, best of 3: 0.945 usec per loop 

Solo si alguien se estuviera preguntando 🙂

No tiene sentido utilizar el método de reverse como rango puede devolver la lista invertida.

Cuando tiene iteración sobre n elementos y desea reemplazar el orden de la lista devuelto por el range(start, stop, step) , tiene que usar el tercer parámetro del rango que identifica el step y configurarlo en -1 , otros parámetros se ajustarán en consecuencia:

  1. Proporcione el parámetro de parada como -1 (es el valor anterior de stop - 1 , la stop fue igual a 0 ).
  2. Como parámetro de inicio utilice n-1 .

Entonces el equivalente de rango (n) en orden inverso sería:

 n = 10 print range(n-1,-1,-1) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

El requisito en esta pregunta requiere una list de enteros de tamaño 10 en orden descendente. Por lo tanto, vamos a producir una lista en python.

 # This meets the requirement. # But it is a bit harder to wrap one's head around this. right? >>> range(10-1, -1, -1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # let's find something that is a bit more self-explanatory. Sounds good? # ---------------------------------------------------- # This returns a list in ascending order. # Opposite of what the requirement called for. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # This returns an iterator in descending order. # Doesn't meet the requirement as it is not a list. >>> reversed(range(10))  # This returns a list in descending order and meets the requirement >>> list(reversed(range(10))) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

Usted puede hacer la impresión de números inversos con rango () BIF como,

 for number in range ( 10 , 0 , -1 ) : print ( number ) 

La salida será [10,9,8,7,6,5,4,3,2,1]

range () – range (inicio, final, incremento / decremento) donde inicio es inclusivo, final es exclusivo e incremento puede ser cualquier número y se comporta como un paso

La pregunta más frecuente es si el range(9, -1, -1) mejor que el reversed(range(10)) en Python 3? Las personas que han trabajado en otros idiomas con iteradores inmediatamente piensan que reversed () debe almacenar en caché todos los valores y luego regresar en orden inverso. La cosa es que el operador reversed() Python no funciona si el objeto es solo un iterador. El objeto debe tener uno de los dos siguientes para que funcione reversed ():

  1. Puede admitir los índices len() y enteros a través de []
  2. O ha implementado el método __reversed__() .

Si intenta utilizar reversed () en un objeto que no tiene ninguno de los anteriores, obtendrá:

 >>> [reversed((x for x in range(10)))] TypeError: 'generator' object is not reversible 

En resumen, Python’s reversed() solo se refiere a una matriz como los objetos, por lo que debería tener el mismo rendimiento que la iteración hacia adelante.

Pero ¿qué pasa con el range() ? ¿No es eso un generador? En Python 3 es un generador, pero está envuelto en una clase que implementa ambas cosas de arriba. Por lo tanto, el range(100000) no ocupa mucha memoria, pero aún así es compatible con la indexación y la inversión.

Entonces, en resumen, puede usar reversed(range(10)) sin ningún impacto en el rendimiento.

creo que esto puede ayudar,

 range(5)[::-1] 

a continuación es el Uso:

 for i in range(5)[::-1]: print i 
 range(9,0,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1] 

Usando sin [:: – 1] o invertido –

 def reverse(text): result = [] for index in range(len(text)-1,-1,-1): c = text[index] result.append(c) return ''.join(result) print reverse("python!") 
 [9-i for i in range(10)] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

No necesariamente tiene que usar la función de rango, simplemente puede hacer la lista [:: – 1] que debería devolver la lista en orden inverso rápidamente, sin usar ninguna adición.

Supongamos que tiene una lista, llámela a = {1,2,3,4,5} Ahora, si desea imprimir la lista a la inversa, simplemente use el siguiente código.

 a.reverse for i in a: print(i) 

Sé que pediste usar el rango pero ya está respondido.

 range(9,-1,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

Es la forma correcta. Si utiliza

 reversed(range(10)) 

usted no obtendrá un caso de 0. Por ejemplo, digamos que su 10 no es un número mágico y una variable que está utilizando para buscar desde el comienzo. Si su n caso es 0, revertido (rango (0)) no se ejecutará, lo que es incorrecto si por casualidad tiene un solo objeto en el índice cero.