HOWTO · Python

Qué significa `[:-1]` en Python

Aprende cómo el slice `[:-1]` de Python devuelve una secuencia sin su elemento final.

En esta página

En Python, sequence[:-1] devuelve una nueva secuencia que contiene todos los elementos excepto el último. Funciona con cadenas y listas, y deja la secuencia original sin cambios. La expresión combina el slicing con -1, que identifica la posición final al indexar desde el final.

El slicing en Python

Python ofrece dos formas equivalentes de describir un slice: el constructor slice() y la sintaxis de indexación. La forma general es sequence[start:stop:step]; cada parte selecciona dónde empezar, dónde detenerse y cuánto avanzar. Los límites start y stop identifican posiciones, mientras que step controla la dirección y el espaciado.

La posición de stop está excluida. Un slice que termina en el índice 4 incluye las posiciones anteriores a 4, por lo que sequence[1:4] selecciona los índices 1, 2 y 3. Los índices pueden contar desde el final: -1 se refiere al elemento final, -2 al anterior. Un límite omitido es diferente de escribir explícitamente -1: con el paso positivo habitual, un inicio omitido comienza al principio de la secuencia y un stop omitido continúa hasta su final. Los valores predeterminados dependen de la dirección del paso. Con un paso negativo, el recorrido se mueve de derecha a izquierda; un inicio omitido comienza en la posición final, mientras que un stop omitido continúa más allá de la primera posición. Este comportamiento dependiente de la dirección es la razón por la que un stop omitido no es lo mismo que escribir explícitamente -1.

El constructor acepta las mismas partes: slice(start, stop, step). A diferencia de la sintaxis de indexación, no puedes dejar en blanco un argumento del constructor; representa un límite omitido con None. Por ejemplo, slice(None, 5) usa un inicio omitido y un stop de 5, equivalente a sequence[:5] para un paso positivo. Con un argumento, slice(5) establece el stop en 5; no significa «empezar en el índice 5». Estas formas son útiles cuando el slice debe almacenarse o pasarse como un valor.

Qué significa [:-1] en Python

En sequence[:-1], el inicio está omitido, por lo que el slice comienza al principio. El stop es -1, que identifica el último elemento, y como el stop está excluido, ese elemento no se copia en el resultado. Por ejemplo, aplicarlo a "Python" da "Pytho"; aplicarlo a ["red", "green", "blue"] da ["red", "green"].

La misma expresión puede aplicarse a diferentes tipos de secuencia con el mismo patrón de resultado. Este ejemplo autónomo usa una cadena corta y una lista de nombres de colores, y luego muestra cada valor cortado en su propia línea. Los valores de entrada facilitan ver qué elemento final se omite, mientras que los valores impresos muestran que los datos de origen siguen disponibles para su uso posterior en el programa.

word = "Python"
colors = ["red", "green", "blue"]

print(word[:-1])
print(colors[:-1])
Pytho
['red', 'green']

El slicing crea un resultado en lugar de cambiar la secuencia de origen. Esto hace que [:-1] sea útil cuando necesitas una versión sin el último carácter o elemento, pero aún necesitas el valor original más tarde. También funciona en una secuencia vacía, devolviendo otra secuencia vacía. Para una secuencia de un solo elemento, el resultado está vacío porque su único elemento es el final. La misma regla del límite de stop explica ambos resultados.