Rebanado (slicing) en Python: cadenas, listas y tuplas
Esta lección es una traducción del original en inglés.Read in EnglishAvisar de un error de traducción
Imagina una pizza cortada en 8 porciones, numeradas del 0 al 7. No siempre quieres la pizza entera. A veces quieres de la porción 2 a la 5. A veces quieres una porción sí y otra no. A veces quieres las tres últimas.
El rebanado (slicing) en Python te permite tomar una porción de cualquier secuencia (una lista, una cadena o una tupla) con la misma notación sencilla. Es una de las características más elegantes de Python y, cuando lo aprendas, lo usarás en todas partes.
En esta lección aprenderás la notación start:stop:step, cómo funcionan los índices negativos, cómo invertir cualquier secuencia y los patrones de rebanado que los programadores de Python usan a diario.
¿Cómo funciona el rebanado básico?
La sintaxis básica de una porción es sequence[start:stop]. Te da los elementos desde el índice start hasta el índice stop, pero sin incluirlo. Piensa en ello como un intervalo semiabierto.
['banana', 'cherry'] ['apple', 'banana', 'cherry'] ['cherry', 'date', 'elderberry']
La regla de "parar antes" puede parecer rara al principio. Pero tiene una ventaja: fruits[0:3] te da exactamente 3 elementos. El número de elementos de una porción siempre es stop - start.
[10, 20, 30] [40, 50, 60] [10, 20, 30, 40, 50, 60]
¿Qué hace el parámetro step?
La sintaxis completa de una porción es sequence[start:stop:step]. El paso (step) controla cuántos elementos se saltan entre uno tomado y el siguiente. Con un paso de 2 tomas un elemento sí y otro no. Con un paso de 3 tomas uno de cada tres.
[0, 2, 4, 6, 8] [1, 3, 5, 7, 9] [0, 3, 6, 9] [1, 3, 5]
Cuando usas un paso, por defecto se empieza en 0 y se llega hasta el final de la secuencia. Solo tienes que indicar el inicio y la parada si quieres acotar el rango.
¿Cómo funcionan los índices negativos en el rebanado?
Los índices negativos cuentan desde el final de la secuencia. -1 es el último elemento, -2 el penúltimo, y así sucesivamente. Puedes usar números negativos en cualquier parte de la porción: en start, en stop o en step.
['d', 'e', 'f'] ['a', 'b', 'c', 'd'] ['e', 'f']
Los índices negativos son utilísimos cuando quieres elementos contando desde el final. Por ejemplo, my_list[-3:] siempre te da los tres últimos elementos, sea cual sea la longitud de la lista.
ytho thon Py
Cómo invertir una secuencia con [::-1]
Un paso negativo le dice a Python que vaya hacia atrás. El patrón más común es [::-1], que invierte la secuencia entera. Sin inicio, sin parada y con paso -1: recorre del final al principio.
[5, 4, 3, 2, 1] olleh (40, 30, 20, 10)
Puedes combinar un paso negativo con start y stop para invertir solo una parte. Con un paso negativo, start debe ser mayor que stop, porque vas hacia atrás.
[7, 6, 5, 4, 3] [9, 7, 5, 3, 1]
Rebanado de cadenas, listas y tuplas
La misma sintaxis [start:stop:step] funciona con todos los tipos de secuencia. La única diferencia es lo que obtienes: al rebanar una lista obtienes una lista, al rebanar una cadena obtienes una cadena y al rebanar una tupla obtienes una tupla.
Alex <class 'str'> [85, 77, 92] (10, 30, 50)
Patrones de rebanado imprescindibles en Python
Estos son los patrones de rebanado que más vas a ver y usar. Tómalos como tu referencia rápida.
['a', 'b', 'c'] ['e', 'f', 'g'] ['b', 'c', 'd', 'e', 'f', 'g'] ['a', 'b', 'c', 'd', 'e', 'f'] ['b', 'c', 'd', 'e', 'f'] ['g', 'f', 'e', 'd', 'c', 'b', 'a']
También puedes usar el rebanado en el lado izquierdo de una asignación para reemplazar una parte de una lista. Esto se llama asignación por porciones (slice assignment).
['red', 'lime', 'sky', 'yellow', 'purple'] ['red', 'orange', 'yellow', 'purple']
Ejercicios de práctica
Dada la lista animals, usa el rebanado para imprimir solo los tres elementos del medio: ['cat', 'dog', 'elephant'].
¿Qué imprime este código? Piensa bien en los índices negativos.
word = 'programming'
print(word[-4:])Escribe el código y ejecútalo para comprobar tu predicción.
Dada la lista letters, usa el rebanado con un paso para imprimir solo los elementos con índice par (0, 2, 4, 6). El resultado debe ser ['a', 'c', 'e', 'g'].
Usa el rebanado para invertir la cadena word e imprime el resultado. La salida debe ser nohtyp.
Este código intenta obtener los tres últimos elementos de una lista, pero usa la porción equivocada. Corrige el error para que imprima ['date', 'elderberry', 'fig'].
Escribe una función llamada is_palindrome(text) que devuelva True si el texto se lee igual en ambos sentidos, y False en caso contrario. Usa el rebanado para invertir la cadena. Convierte antes el texto a minúsculas para que la comprobación no distinga entre mayúsculas y minúsculas.
Pruébala con estas llamadas:
print(is_palindrome('racecar'))
print(is_palindrome('Python'))
print(is_palindrome('Madam'))