python-slices

Qué son y cómo usar Slices en Python

Los “slices” en Python son una herramienta muy útil, que nos permite extraer porciones de secuencias 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 la original.

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 (excluido).
  • paso: Tamaño del paso o incremento entre elementos del slice (opcional).

Consideraciones Especiales

Omisión de valores valores

Podemos omitir uno, varios, o incluso todos los parámetros del Slice. Este se comportará distinto cada omisión. Si no especificamos

  • El inicio, el slice comenzará desde el primer elemento
  • El fin, el slice terminará en el último elemento
  • El paso, el slice usará un paso de 1
primeros_salvo_tres = numeros[3:]  # Extrae los elementos del 3 al final
primeros_tres = numeros[:3]  # Extrae los tres primeros elementos

Ver más abajo los ejemplos para entender bien los conceptos 👇

Uso de índices negativos

Python permite usar índices negativos para referirse a elementos relativos final de la secuencia, en lugar que desde el principio.

Parece un poco complicado, y al principio lía un poco. Pero básicamente,

ultimos_tres = numeros[-3:]  # Extrae los últimos tres elementos
primeros_salvo_tres = numeros[:-3]  # Extrae los elementos, salvo los tres últimos

Por otro lado, si el paso, es negativo, el Slice recorre la secuencia en orden inverso.

Nuevamente, ver más abajo los ejemplos para entender bien los conceptos 👇

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 de Slices

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.