El slicing permite extraer, copiar, invertir y seleccionar partes de una secuencia con una sintaxis compacta. Funciona con listas, strings, tuplas, rangos y muchos objetos de bibliotecas externas. Cuando comprendes las tres posiciones —inicio, fin y paso— puedes sustituir numerosos bucles manuales por expresiones claras.
En esta guía de slicing en Python aprenderás los fundamentos, índices negativos, copias, asignación de segmentos, eliminación, inversión y errores frecuentes. Para repasar la estructura principal utilizada en los ejemplos, consulta la guía de listas en Python.
Sintaxis del slicing
Un segmento utiliza secuencia[inicio:fin:paso]. El índice inicial se incluye y el final se excluye. Cualquier componente puede omitirse.
letras = ["a", "b", "c", "d", "e", "f"]
print(letras[1:4]) # ['b', 'c', 'd']
print(letras[:3]) # ['a', 'b', 'c']
print(letras[3:]) # ['d', 'e', 'f']
print(letras[:]) # copia superficialLa exclusión del límite final coincide con el comportamiento explicado en la guía de range() en Python.
Slicing de strings y tuplas
Los strings y las tuplas son inmutables. El slicing devuelve un objeto nuevo sin modificar el original.
lenguaje = "Python"
print(lenguaje[0:3]) # Pyt
print(lenguaje[-3:]) # hon
punto = (10, 20, 30, 40)
print(punto[1:3]) # (20, 30)La guía de strings en Python muestra más operaciones de búsqueda, limpieza y formato.
Índices negativos
Los índices negativos cuentan desde el final. -1 representa el último elemento.
valores = [5, 10, 15, 20, 25]
print(valores[-1]) # 25
print(valores[-3:]) # [15, 20, 25]
print(valores[:-1]) # todo menos el últimoLos límites de un slice pueden superar el tamaño de la secuencia. Un índice individual fuera del rango genera IndexError, pero un slice devuelve los elementos disponibles.
Utilizar el paso
numeros = list(range(10))
print(numeros[::2]) # posiciones pares
print(numeros[1::2]) # posiciones impares
print(numeros[::-1]) # copia invertidaUn paso de cero no es válido y genera ValueError. Un paso negativo recorre la secuencia hacia atrás.
Invertir una secuencia
palabra = "reconocer"
es_palindromo = palabra == palabra[::-1]
print(es_palindromo)[::-1] crea una copia invertida. Cuando solo necesitas recorrer hacia atrás, reversed() puede evitar una copia completa.
Copiar una lista
Un slice completo crea una copia superficial. La lista exterior es nueva, pero los objetos mutables internos siguen compartidos.
original = [[1, 2], [3, 4]]
copia = original[:]
copia.append([5, 6])
print(original)
copia[0].append(99)
print(original)Para copiar también los objetos anidados, utiliza copy.deepcopy().
Modificar listas con asignación de slices
colores = ["rojo", "verde", "azul", "negro"]
colores[1:3] = ["amarillo", "blanco"]
print(colores)
colores[2:2] = ["morado"]
print(colores)
colores[-1:] = []
print(colores)La asignación modifica la lista original. Cuando el paso es uno, la cantidad de elementos nuevos no tiene que coincidir con la cantidad seleccionada.
Asignación con paso
valores = [0, 1, 2, 3, 4, 5]
valores[::2] = [10, 20, 30]
print(valores)En un slice extendido, la cantidad de elementos de reemplazo debe ser exactamente igual a la cantidad de posiciones seleccionadas.
Eliminar con del
cola = ["a", "b", "c", "d", "e"]
del cola[1:4]
print(cola) # ['a', 'e']Nombrar segmentos complejos
El objeto slice() representa los mismos valores de inicio, fin y paso. Nombrarlo mejora la lectura cuando una selección se repite.
registro = "2026-07-11|PAGADO|00042"
parte_fecha = slice(0, 10)
parte_estado = slice(11, 17)
parte_id = slice(18, None)
print(registro[parte_fecha])
print(registro[parte_estado])
print(registro[parte_id])Dividir una lista en lotes
def crear_lotes(elementos, tamano):
if tamano <= 0:
raise ValueError("El tamaño debe ser positivo")
for inicio in range(0, len(elementos), tamano):
yield elementos[inicio:inicio + tamano]
for lote in crear_lotes(list(range(10)), 3):
print(lote)Este patrón combina slicing con generadores y es útil para solicitudes a APIs, inserciones en bases de datos y procesamiento paginado.
Slicing y list comprehensions
El slicing selecciona posiciones; una comprensión transforma o filtra valores. La guía de list comprehensions en Python explica cuándo conviene utilizar cada herramienta.
numeros = list(range(20))
seleccion = numeros[5:15]
cuadrados_pares = [n ** 2 for n in seleccion if n % 2 == 0]Errores frecuentes
- Olvidar que el índice final queda excluido.
- Usar un paso negativo con límites pensados para avanzar.
- Creer que
lista[:]realiza una copia profunda. - Crear copias grandes cuando solo se necesita iterar.
- Confundir un índice individual con un slice de un elemento.
- Modificar una lista compartida mediante asignación de slices.
Conclusión
El slicing en Python sirve para mucho más que extraer una parte de una lista. Permite utilizar posiciones negativas, saltos, inversión, copias superficiales, reemplazo, eliminación y procesamiento por lotes. Recuerda la regla de inicio incluido y fin excluido, y evita copias innecesarias cuando trabajes con grandes volúmenes de datos.
Documentación oficial
La documentación de Python explica las operaciones comunes de las secuencias y la sintaxis formal de los slicings, incluidos los valores de inicio, fin y paso.






