HOWTO · Python

Rango hacia atrás en Python

Este tutorial explica cómo iterar hacia atrás en Python con la función `range()` y cuándo usar `reversed()`, slicing o un contador.

En esta página

La forma de iterar hacia atrás en Python depende de lo que quieras recorrer. Usa un range() descendente para obtener valores numéricos, reversed() para recorrer una secuencia existente sin modificarla, o slicing cuando necesites una copia invertida.

Usa range() con un paso negativo

range(start, stop, step) genera valores desde start en dirección a stop, pero nunca incluye stop. Un paso negativo avanza hacia valores menores. Por ejemplo, para contar del 10 al 1, empieza en 10 y usa 0 como límite exclusivo:

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

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

Para incluir el cero al contar hacia atrás desde 100, usa range(100, -1, -1): el límite debe ser uno menos que el último valor que quieras incluir. Un paso negativo no cuenta hacia atrás si el valor inicial ya es menor que el límite; elige el inicio, el límite y el paso de modo que indiquen la misma dirección. range() resulta útil cuando el bucle necesita números, como índices o una cuenta regresiva, en lugar de elementos de una colección.

Usa reversed() para recorrer una secuencia

Usa reversed() cuando necesites visitar los elementos de una secuencia existente desde el último hasta el primero. Devuelve un iterador y deja intacta la secuencia original. Funciona con listas, cadenas y rangos, entre otros objetos reversibles.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

items = ["first", "second", "third"]
for item in reversed(items):
    print(item)

En este ejemplo, las cadenas first, second y third se conservan en inglés. Para una secuencia numérica, reversed(range(5)) recorre los valores del 4 al 0. Prefiere esta forma cuando los valores ya provienen de un rango; usa range() con un paso negativo si quieres especificar directamente el intervalo numérico descendente. Como reversed() devuelve un iterador, no crea una segunda lista solo para recorrer los elementos hacia atrás.

Invierte una lista o cadena con slicing

Un slice con un paso de -1, escrito como sequence[::-1], produce los elementos en orden inverso. En una lista o cadena, crea una secuencia nueva y conserva intacta la original. Es una opción concisa cuando necesitas el valor invertido en sí, por ejemplo, para asignarlo a otra variable o pasarlo a una función.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

word = "Python"
backward = word[::-1]
print(backward)

El slicing crea una copia, por lo que usa memoria proporcional a la longitud de la secuencia. Si solo necesitas recorrer los elementos y no necesitas un valor invertido independiente, reversed(sequence) evita esa copia. La misma sintaxis de slice funciona con listas; por ejemplo, items[::-1].

Usa un contador cuando necesites lógica personalizada en el bucle

Un bucle while es útil cuando cada paso depende del trabajo realizado en la iteración anterior o cuando la actualización es más compleja que restar uno. Asigna al contador el primer valor que quieras procesar, usa una condición que incluya ese valor cuando sea cero y actualiza el contador exactamente una vez por iteración:

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

number = 4
while number >= 0:
    print(number)
    number -= 1
4
3
2
1
0

La condición number >= 0 incluye el cero. Si usaras number > 0, el bucle terminaría antes de procesarlo. Para una cuenta regresiva fija y sencilla, range() es más breve y reduce la posibilidad de errores al actualizar el contador; elige un contador cuando la lógica personalizada haga útil esa actualización explícita.

Elige el método adecuado para iterar hacia atrás

Usa range() con un paso negativo cuando necesites una secuencia de números o índices descendentes. Usa reversed() cuando quieras recorrer una secuencia existente sin modificarla y no necesites una copia. Usa [::-1] cuando necesites obtener una lista o cadena invertida como valor nuevo, teniendo presente que se crea una copia. Elige un contador en un bucle while cuando el siguiente paso o la condición de salida dependan de una lógica personalizada. En todos los casos, decide si debes incluir el límite antes de escribir el límite de range o la condición del bucle; esa es la causa más común de errores de desfase de una unidad.