Por cierto, es probable que desee pasar de 99 a 0, y rara vez de 100 a 0. Esto afecta las respuestas.
Acumenus
1
@Acumenus Eso fue exactamente lo que busqué cuando llegué aquí. Y para el registro, la solución es simplemente escribir: range(100)[::-1](que se traduce automáticamente a range(9, -1, -1)) - Probado en Python 3.7
Hassan
Respuestas:
399
Intente range(100,-1,-1), el tercer argumento es el incremento a usar (documentado aquí ).
(las opciones de "rango", inicio, parada, paso se documentan aquí )
También necesito usar esto para eliminar elementos de la colección, por eso solo quería los índices.
Joan Venge
2
El segundo argumento es uno menos que el valor final. así que si pones -1, el rango se detiene en 0, si pones -5, el rango se detiene en -4 (para un incremento de -1)
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
55
Python antes de 2.6 asigna todos los números, porque invertido no tiene forma de decirle al xrange que retroceda ... (Desde Python 2.6 llama __reversed __ ().)
Robert Siemer
Yo prefiero reversed(xrange(len(list)))a xrange(len(list)-1:-1:-1); este último se ve raro con tantos -1.
musiphil
1
xrange () ya no está disponible en Python 3
Chris Graf el
1
En Python 3, se rangecomporta de la misma manera xrangeque en 2.7. @hacksoi depende del caso de uso, pero digamos que está iterando hacia atrás en un búfer grande, digamos que son 10 MB, luego crear los índices inversos por adelantado tomaría segundos y usaría más de 50 MB de memoria. Usar un generador invertido tomaría milisegundos y solo usaría unos pocos bytes de memoria.
Blixt
34
for i in range(100,-1,-1)
y alguna solución un poco más larga (y más lenta):
for i in reversed(range(101))for i in range(101)[::-1]
sí, PEP-322 nos brinda una forma clara y menos propensa a errores para revertir las iteraciones.
Allen Shen
1
Esto es bueno. La recomendación de cómo implementar reverseden PEP-322 es engañosa, por lo que debe tenerse en cuenta que reversedrecurrirá __reversed__al iterable y devolverá el resultado, y para los rangeobjetos este es un range_objectiterador evaluado perezoso . En resumen: el uso de este método sigue siendo una evaluación perezosa.
Ruzihm
5
Otra solución:
z =10for x in range (z):
y = z-x
print y
Resultado:
10987654321
Sugerencia: Si está utilizando este método para contar los índices en una lista, querrá -1 desde el valor 'y', ya que sus índices de lista comenzarán en 0.
Intenté esto en uno de los ejercicios de codeacademy (invertir caracteres en una cadena sin usar reverse ni :: -1)
def reverse(text):
chars=[]
l = len(text)
last = l-1for i in range (l):
chars.append(text[last])
last-=1
result=""for c in chars:
result += c
return result
print reverse('hola')
Parece que su respuesta es copiar y pegar la prueba que realizó. Intente publicar un ejemplo mínimo: el uso de globaly timeno es relevante para la pregunta inicial.
Michael Doubez
-1
También puede crear un mecanismo inverso personalizado en python. Que se puede usar en cualquier lugar para recorrer un iterable hacia atrás
classReverse:"""Iterator for looping over a sequence backwards"""def __init__(self, seq):
self.seq = seq
self.index = len(seq)def __iter__(self):return self
def __next__(self):if self.index ==0:raiseStopIteration
self.index -=1return self.seq[self.index]>>> d =[1,2,3,4,5]>>>for i inReverse(d):...print(i)...54321
¡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 en su mayoría solo contiene código (incluso si está funcionando) generalmente no ayudará al OP a comprender su problema.
SuperBiasedMan
Te das cuenta de que el uso sortedalmacenará innecesariamente toda la lista en la memoria, ¿verdad? Esto es un desperdicio y no es factible para grandes a.
range(100)[::-1]
(que se traduce automáticamente arange(9, -1, -1)
) - Probado en Python 3.7Respuestas:
Intente
range(100,-1,-1)
, el tercer argumento es el incremento a usar (documentado aquí ).(las opciones de "rango", inicio, parada, paso se documentan aquí )
fuente
En mi opinión, este es el más legible:
fuente
reversed(xrange(len(list)))
axrange(len(list)-1:-1:-1)
; este último se ve raro con tantos-1
.range
comporta de la misma maneraxrange
que en 2.7. @hacksoi depende del caso de uso, pero digamos que está iterando hacia atrás en un búfer grande, digamos que son 10 MB, luego crear los índices inversos por adelantado tomaría segundos y usaría más de 50 MB de memoria. Usar un generador invertido tomaría milisegundos y solo usaría unos pocos bytes de memoria.y alguna solución un poco más larga (y más lenta):
fuente
Generalmente en Python, puede usar índices negativos para comenzar desde atrás:
Resultado:
fuente
Por qué su código no funcionó
Tu código
for i in range (100, 0)
está bien, exceptoEl tercer parámetro (
step
) es por defecto+1
. Por lo tanto, debe especificar el tercer parámetro para range () como-1
para retroceder.NOTA: Esto incluye 100 y 0 en la salida.
Hay múltiples formas
Mejor manera
Para la forma pitónica, consulte PEP 0322 .
Este es un ejemplo de Python3 para imprimir de 100 a 0 (incluyendo 100 y 0).
fuente
reversed
en PEP-322 es engañosa, por lo que debe tenerse en cuenta quereversed
recurrirá__reversed__
al iterable y devolverá el resultado, y para losrange
objetos este es unrange_object
iterador evaluado perezoso . En resumen: el uso de este método sigue siendo una evaluación perezosa.Otra solución:
Resultado:
Sugerencia: Si está utilizando este método para contar los índices en una lista, querrá -1 desde el valor 'y', ya que sus índices de lista comenzarán en 0.
fuente
La respuesta simple para resolver su problema podría ser así:
fuente
for var in range(10,-1,-1)
trabajosfuente
Corto y dulce. Esta fue mi solución al hacer el curso codeAcademy. Imprime una cadena en orden de revoluciones.
fuente
Siempre puede aumentar el rango y restar de una variable en su caso
100 - i
dondei in range( 0, 101 )
.fuente
Intenté esto en uno de los ejercicios de codeacademy (invertir caracteres en una cadena sin usar reverse ni :: -1)
fuente
Quería recorrer dos listas hacia atrás al mismo tiempo, así que necesitaba el índice negativo. Esta es mi solución:
Resultado:
fuente
Oh bien, lee la pregunta mal, ¿supongo que se trata de retroceder en una matriz? si es así, tengo esto:
fuente
global
ytime
no es relevante para la pregunta inicial.También puede crear un mecanismo inverso personalizado en python. Que se puede usar en cualquier lugar para recorrer un iterable hacia atrás
fuente
fuente
sorted
almacenará innecesariamente toda la lista en la memoria, ¿verdad? Esto es un desperdicio y no es factible para grandesa
.