Estoy tratando de pasar de 100 a 0. ¿Cómo hago esto en Python?
for i in range (100,0)
no funciona
range(100)[::-1]
(que se traduce automáticamente a range(9, -1, -1)
) - Probado en Python 3.7
Estoy tratando de pasar de 100 a 0. ¿Cómo hago esto en Python?
for i in range (100,0)
no funciona
range(100)[::-1]
(que se traduce automáticamente a range(9, -1, -1)
) - Probado en Python 3.7
Respuestas:
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í )
En mi opinión, este es el más legible:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
a xrange(len(list)-1:-1:-1)
; este último se ve raro con tantos -1
.
range
comporta de la misma manera xrange
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.
Por qué su código no funcionó
Tu código for i in range (100, 0)
está bien, excepto
El tercer parámetro ( step
) es por defecto +1
. Por lo tanto, debe especificar el tercer parámetro para range () como -1
para retroceder.
for i in range(100, -1, -1):
print(i)
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).
for i in reversed(range(101)):
print(i)
reversed
en PEP-322 es engañosa, por lo que debe tenerse en cuenta que reversed
recurrirá __reversed__
al iterable y devolverá el resultado, y para los range
objetos este es un range_object
iterador evaluado perezoso . En resumen: el uso de este método sigue siendo una evaluación perezosa.
for var in range(10,-1,-1)
trabajos
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-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Quería recorrer dos listas hacia atrás al mismo tiempo, así que necesitaba el índice negativo. Esta es mi solución:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Resultado:
-1 2
-2 5
-3 4
-4 3
-5 1
Oh bien, lee la pregunta mal, ¿supongo que se trata de retroceder en una matriz? si es así, tengo esto:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
y time
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
class Reverse:
"""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:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
almacenará innecesariamente toda la lista en la memoria, ¿verdad? Esto es un desperdicio y no es factible para grandes a
.