Segmentación de una cadena
El slicing en programación, especialmente en Python, es una técnica para extraer subcadenas o sublistas de una secuencia (como cadenas, listas o tuplas) usando índices. Permite tomar un rango de elementos especificando un inicio, un final y opcionalmente un paso, sin modificar la secuencia original.
Seleccionar una porción es similar a seleccionar un carácter:
s = 'Monty Python'
print(s[0:5]) # Imprime: Monty
print(s[6:12]) # Imprime: Python
El operador [n:m] retorna la parte de la cadena desde el "n-ésimo" carácter hasta el "m-ésimo" carácter, incluyendo el primero pero excluyendo el último.
En Python, cuando haces slicing en una cadena y el segundo índice es mayor que el tamaño de la cadena, Python no da error. En vez de eso, limita el índice al final de la cadena. Esto es porque el slicing es "tolerante" a índices fuera de rango.
cadena = "Python"
resultado = cadena[1:100]
print(resultado) # Imprime "ython"
Si omites el primer índice (antes de los dos puntos), la porción comienza desde el inicio de la cadena. Si omites el segundo índice, la porción va hasta el final de la cadena.
fruta = 'banana'
fruta[:3] # Imprime: 'ban'
fruta[3:] # Imprime: 'ana'
Si el primer índice es mayor o igual que el segundo, el resultado es una cadena vacía, representada por comillas:
fruta = 'banana'
fruta[3:3] # Imprime: ''
Una cadena vacía no contiene caracteres y tiene un tamaño de 0, pero fuera de eso es lo mismo que cualquier otra cadena.
Si utilizamos solo 2 puntos, lo que se hará es una copia completa de la cadena:
fruta = 'banana'
fruta[:] # Imprime: 'banana'
Slicing terciario
El slicing terciario, o slicing extendido, es una forma de añadir un tercer parámetro conocido como paso.
La sintaxis es la siguiente:
cadena[inicio:fin:paso]
Donde:
inicioes el índice donde comienza el slicing (incluido).fines el índice donde termina el slicing (excluido).pasoes el incremento entre los elementos tomados.
Ejemplos:
# Creamos una cadena de ejemplo
cadena = "abcdefghij"
# Obtenemos los elementos desde el índice 2 hasta el índice 7 con un paso de 2
resultado = cadena[2:7:2]
# [2:7] tomaría la cadena "cdefg"
# El paso 2 significa que tomamos de 2 en 2 (o saltamos 1) comenzando en el primero "ceg"
print(resultado) # Salida: "ceg"
# Obtenemos todos los elementos con un paso de 3
# [:] tomamos todos los elementos "abcdefghij"
# Tomamos cada 3 elementos (o saltamos 2) "adgj"
resultado = cadena[::3]
print(resultado) # Salida: "adgj"
Podemos utilizar este método para crear una nueva lista invertida de la siguiente manera:
letras = "abcd"
letras_invertidas = letras[::-1]
print(letras_invertidas) # Imprime: "dcba"