Historia de la cuestión: los slicing (cortes) aparecieron en Python desde el principio, como una forma sintácticamente conveniente de obtener fragmentos de secuencias sin recorrer manualmente con un bucle.
Problema: Los programadores que vienen de otros lenguajes a menudo utilizan bucles explícitos para trabajar con sublistas. Esto aumenta el volumen y reduce el rendimiento del código.
Solución: El slicing de listas permite obtener partes de una lista, cadena u otras secuencias de forma compacta, clara y eficiente. Los cortes no modifican el objeto original, sino que devuelven su copia o vista (para algunos tipos).
Ejemplo de código:
lst = [0, 1, 2, 3, 4, 5] sub = lst[1:4] # [1, 2, 3] reverse = lst[::-1] # [5, 4, 3, 2, 1, 0] every_second = lst[::2] # [0, 2, 4]
Características clave:
¿Afecta el cambio de valor en un corte a la lista original?
No: cuando asignas una nueva lista a un corte, estás cambiando la lista original en esas posiciones; pero al realizar un corte obtienes una nueva lista.
Ejemplo:
lst = [1, 2, 3, 4] lst2 = lst[1:3] # [2, 3] lst2[0] = 20 # No afecta a lst: lst2 es un nuevo objeto
Sin embargo:
lst[1:3] = [7, 8] # esto cambia lst directamente
¿Cómo funciona el corte con índices negativos?
Los índices negativos se cuentan desde el final: -1 es el último elemento, -2 es el penúltimo. Por ejemplo, lst[:-1] significa todos los elementos excepto el último.
¿Qué sucederá si te sales de los límites de la lista en un corte?
Python maneja estas situaciones "inteligentemente": no habrá error, simplemente el corte se ajustará a los límites disponibles. Por ejemplo, lst[100:200] dará una lista vacía o el sublista posible más grande.
El manejo de listas ocupa cientos de líneas con bucles anidados y condiciones para "cortar" los datos de entrada, el código es complejo y lento.
Ventajas:
Desventajas:
El mismo código reescrito con slicing y funciones integradas, ocupa menos líneas, es fácil de probar.
Ventajas:
Desventajas: