Los slices en Python son una herramienta muy útil, que nos permite extraer porciones de secuencias de elementos (como listas, tuplas o cadenas) con muy poco código.
Los slices nos permiten trabajar con fragmentos específicos de una secuencia, sin tener que modificar ni iterar sobre la secuencia.
La sintaxis básica para crear un slice en Python es la siguiente:
secuencia[inicio:fin:paso]
inicio: Índice donde comienza el slice (incluido)fin: Índice donde termina el slice (no incluido)paso: Tamaño del paso o incremento entre elementos del slice (opcional)
Consideraciones especiales
Modificación de valores con slices
Los Slices también pueden ser utilizados para modificar valores en una secuencia.
frutas = ["manzana", "banana", "cereza", "dátil", "uva"]
frutas[1:3] = ["pera", "naranja"] # Reemplaza "banana" y "cereza" por "pera" y "naranja"
En este caso,
frutas[1:3]selecciona los elementos"banana"y"cereza"- Los reemplaza con
"pera"y"naranja".
Ejemplos prácticos
Supongamos que tenemos una lista de números:
numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ahora, veamos cómo el Slicing se comporta con diferentes combinaciones de inicio, fin y paso:
Sin especificar inicio, fin ni paso
resultado = numeros[:]
print(resultado) # Resultado: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
En este caso, el slice copia toda la lista original, ya que no se especifica ningún valor para inicio, fin o paso.
Especificando inicio y fin
resultado = numeros[2:7]
print(resultado) # Resultado: [2, 3, 4, 5, 6]
Aquí, el slice comienza en el índice 2 y termina en el índice 6 (no inclusivo), utilizando el paso predeterminado de 1.
Especificando solo fin
resultado = numeros[:5]
print(resultado) # Resultado: [0, 1, 2, 3, 4]
En este caso, el Slice comienza desde el primer elemento y termina en el índice 5 (no inclusivo), utilizando el paso predeterminado de 1.
Especificando solo inicio
resultado = numeros[3:]
print(resultado) # Resultado: [3, 4, 5, 6, 7, 8, 9]
Aquí, el Slice comienza en el índice 3 y continúa hasta el último elemento de la lista, utilizando el paso predeterminado de 1.
Especificando solo paso
numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numeros_pares = numeros[::2] # Resultado: [0, 2, 4, 6, 8]
Aquí, numeros[::2] crea un nuevo slice de la lista numeros con un paso de 2, lo que significa que extrae cada segundo elemento, resultando en [0, 2, 4, 6, 8].
Especificando todo
resultado = numeros[1:8:2]
print(resultado) # Resultado: [1, 3, 5, 7]
En este ejemplo, el slice comienza en el índice 1, termina en el índice 8 (no inclusivo) y utiliza un paso de 2, tomando cada segundo elemento desde el inicio hasta el final especificado.
Índices negativos al principio
Al utilizar índices negativos en el inicio del slice, se extraen elementos desde el final de la lista.
ultimos_tres = numeros[-3:] # Extrae los últimos tres elementos: [7, 8, 9]
En este caso, numeros[-3:] crea un slice que incluye los últimos tres elementos de la lista numeros.
Índices negativos al final
También es posible utilizar índices negativos al final del slice para definir el inicio desde el final de la lista.
sin_ultimos_tres = numeros[:-3] # Extrae todos los elementos excepto los últimos tres: [0, 1, 2, 3, 4, 5, 6]
Aquí, numeros[:-3] crea un slice que incluye todos los elementos de la lista numeros excepto los últimos tres.
Paso negativo
El uso de un paso negativo en el slice invierte el orden de los elementos extraídos.
invertido = numeros[::-1] # Invierte el orden de la lista: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Al especificar numeros[::-1], se crea un slice que comienza desde el último elemento hasta el primero, invirtiendo así el orden de la lista original.
