Saltar a contenido

Rebanadas (Slicing)
de cadenas de caracteres

Las rebanadas (slicing en inglés) en Python se utilizan para extraer una parte de la cadena de caracteres (un intervalo de posiciones de la cadena de caracteres).

Aquí tienes un ejemplo básico:

Python
# Crear una cadena
mi_cadena = "Hola Mundo"

# Obtener los caracteres del índice 5 al índice 9 (el 10 se excluye)
sub_cadena = mi_cadena[5:10]

print(sub_cadena)
Terminal (Entrada/Salida)
Mundo

En este código, mi_cadena[5:10] crea una nueva cadena que contiene los caracteres de mi_cadena desde el índice 5 hasta el índice 9.

Además, puedes omitir el índice inicial para empezar desde el principio de la cadena, o puedes omitir el índice final para ir hasta el final de la cadena.

También puedes usar un tercer número para especificar el paso de la rebanada. Por ejemplo, mi_lista[::2] obtendría todos los elementos de mi_lista con índices pares.

Ejemplos de aplicación

Python
cadena = "Hola Mundo!"

# Imprime los caracteres en los índices 5 y 6 ("Mu")
print(cadena[5:7])      

# Imprime los caracteres en los índices -10, -9 y -8 ("ola")
print(cadena[-10:-7])   

# Imprime los caracteres desde el índice 5 hasta el final ("Mundo!")
print(cadena[5:])       

# Imprime los caracteres desde el inicio hasta el índice 3 ("Hola")
print(cadena[:4])      

# Imprime cada segundo carácter desde el índice 2 hasta el 10 ("l ud")
print(cadena[2:11:2])  

# Imprime la cadena completa ("Hola Mundo!")
print(cadena[:])       

# Imprime cada segundo carácter de la cadena completa ("Hl ud!")
print(cadena[::2])      

# Imprime la cadena en orden inverso ("!odnuM aloH")
print(cadena[::-1])  

Cada línea imprime una parte diferente de la cadena, utilizando diferentes maneras de indexación y segmentación.

Terminal (Entrada/Salida)
# Son los caracteres comprendidos en el intervalo de posiciones sexta hasta séptima, con índices 5 al 6  
Mu      

# Son los caracteres comprendidos en el intervalo de posiciones décima desde atrás hasta octava desde atrás, con índices -10 al -8 
ola     

# Son los caracteres comprendidos en el intervalo de posiciones sexta hasta el final, con índices 5 en adelante 
Mundo!  

# Son los caracteres comprendidos en el intervalo de posiciones primera hasta cuarta, con índices 0 al 3 
Hola    

# Son los caracteres comprendidos en el intervalo de posiciones tercera hasta undécima, saltando de dos en dos, con índices 2 al 10 con paso 2
l ud    

# Son todos los caracteres de la cadena, desde el inicio hasta el final
Hola Mundo! 

# Son los caracteres comprendidos en toda la cadena, saltando de dos en dos, con índices desde el inicio hasta el final con paso 2
Hl ud!  

# Son todos los caracteres de la cadena, desde el final hasta el inicio, es decir, la cadena invertida
!odnuM aloH 

¡Para recordar!

El subconjunto resultante de la cadena de caracteres incluye el valor del índice de inicio, pero no el valor del índice de fin si no su valor anterior.

Y un tercer valor permite determinar un paso, que incluso puede ser negativo.

¡Precaución!

Cuando trabajas con índices, estos siempre deben ser válidos.
Cualquier intento de acceso a una posición inexistente (fuera de rango) resultará en un error de ejecución del programa.

Python
print(cadena[-2:-6]) # No devuelve ninguna subcadena
print(cadena[-6:10]) # Output: Mundo
print(cadena[5:-1]) # Output: Mundo
print(cadena[5:15]) # Output: Mundo!

print(cadena[15]) IndexError: string index out of range

print(cadena[-16]) IndexError: string index out of range

Presta atención que según el caso, utilizar un índice fuera de rango no siempre resulta en error.

En el primer ejemplo, la rebanada no devuelve ninguna subcadena porque los índices están invertidos.

En el cuarto ejemplo, la rebana se realiza sin problemas. Claro, independientemente que el índice de fin esté fuera de rango, la rebanada se efectuará desde la sexta posición (índice 5) hasta la quinceava posición (índice 14) o hasta alcanzar el final de la cadena de caracteres, lo que ocurra primero.

Pero en el quinto y sexto ejemplo si se produce un error de fuera de rango ya que la cadena no posee 16 caracteres.