Slicing: índices, pasos y copias en Python

Actualizado el: 20/08/2026
Tempo de leitura: 3 minutos
Fatiamento de listas (slicing) em Python

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 superficial

La 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 último

Los 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 invertida

Un 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.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    notebook com código saindo da tela
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Variables: asignación, tipos y alcance en Python

    Aprende variables en Python: asignación, nombres, tipos, conversiones, referencias, mutabilidad, alcance, constantes, None y errores frecuentes.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Diferença entre operadores is e == em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    == vs is en Python: igualdad vs identidad

    Entiende la diferencia entre == e is en Python, igualdad, identidad, None, interning, copias superficiales, deepcopy y objetos personalizados.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    Menu interativo no terminal criado com Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Menú interactivo en terminal con Python

    Crea un menú interactivo en Python con while, funciones, diccionarios, validación, submenús, persistencia JSON y manejo seguro de errores.

    Ler mais

    Tempo de leitura: 4 minutos
    12/07/2026
    ícone de loop com o texto 'While' abaixo
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    while: repite acciones con condiciones en Python

    Aprende bucles while en Python con condiciones, validación, menús, break, continue, else, centinelas, reintentos y buenas prácticas.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Imagem de um quadro negro com várias interrogações no lugar de lâmpadas, e uma lâmpada conectada no meio
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    if, elif y else: lógica condicional en Python

    Aprende if, elif y else en Python con comparaciones, operadores lógicos, validación, rangos, menús, retornos tempranos y pruebas.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Manipulação de dados JSON em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    JSON en Python: leer, escribir y validar datos

    Aprende JSON en Python con load, loads, dump, dumps, archivos UTF-8, validación, APIs, Decimal, fechas y escritura segura.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026