¿Qué tiene eso de elegante? Dedica tiempo a invertir una lista en lugar de generarla de la manera que desea.
alexis
5
@alexis no cuesta nada. Obtienes reversed(range)gratis debido a la buena range_reverseoptimización incorporada en CPython. Hice algunos puntos de referencia rápida y no pude encontrar una diferencia significativa entre el coste step=-1y reversed()tanto en Python 2.7 y 3.3. También tenga en cuenta que este idioma se usa en heapq .
kojiro
Gracias, @kojiro, eso es interesante. Pero a menos que haya utilizado xrangeen sus pruebas de Python 2.7, reverseestará operando en una lista ordinaria, ya generada, no en un objeto de rango; Entonces, ¿estás diciendo que cualquier lista se puede revertir de manera eficiente o solo range/xrangeobjetos? (el código de heapq al que se vincula implica un objeto de rango de Python 3).
alexis
@alexis No sería tan atrevido como para sugerir que cualquier lista se puede revertir de manera eficiente; de todos modos, esa es una declaración demasiado incondicional para que la responda. Sin embargo, es revelador que el código de heapify cambió de step=-1a reversed()entre Python 2.3 y 2.4
kojiro
1
reversed(range(10))posiblemente no pueda salir a 4través 0. ¿Quizás quisiste decir range(5)?
0 es un valor condicional cuando esta condición es verdadera, el ciclo seguirá ejecutándose. 10 es el valor inicial. 1 es el modificador donde puede ser un simple decremento.
for number in reversed(range(0,10,1)):print number;
Llega tarde a la fiesta, pero para cualquiera que tenga la tarea de crear el suyo propio o quiera ver cómo funcionaría, aquí está la función con una ventaja adicional de reorganizar los valores de inicio-parada según el incremento deseado:
for i in reversed(mat):
aunque podría ser más lentoRespuestas:
fuente
range(5,-1,-1)
. Aunque probablemente podría averiguarlo por ensayo y error.Esto es muy tarde, pero solo quería agregar que hay una forma más elegante: usar
reversed
da:
fuente
reversed(range)
gratis debido a la buenarange_reverse
optimización incorporada en CPython. Hice algunos puntos de referencia rápida y no pude encontrar una diferencia significativa entre el costestep=-1
yreversed()
tanto en Python 2.7 y 3.3. También tenga en cuenta que este idioma se usa en heapq .xrange
en sus pruebas de Python 2.7,reverse
estará operando en una lista ordinaria, ya generada, no en un objeto de rango; Entonces, ¿estás diciendo que cualquier lista se puede revertir de manera eficiente o solorange/xrange
objetos? (el código de heapq al que se vincula implica un objeto de rango de Python 3).step=-1
areversed()
entre Python 2.3 y 2.4reversed(range(10))
posiblemente no pueda salir a4
través0
. ¿Quizás quisiste decirrange(5)
?Esto te daría
6,5,4,3,2,1
Como para
te daría
5,4,3,2,1,0
fuente
fuente
fuente
0 es un valor condicional cuando esta condición es verdadera, el ciclo seguirá ejecutándose. 10 es el valor inicial. 1 es el modificador donde puede ser un simple decremento.
fuente
Llega tarde a la fiesta, pero para cualquiera que tenga la tarea de crear el suyo propio o quiera ver cómo funcionaría, aquí está la función con una ventaja adicional de reorganizar los valores de inicio-parada según el incremento deseado:
Incremento negativo:
O, con arranque-parada invertido:
Salida:
Incremento regular:
Salida:
Incremento cero:
Salida:
fuente
Para python3 donde
-1
indicar el valor que se decrementará en cada pasofor n in range(6,0,-1): print(n)
fuente