Saltar al contenido principal

Rodaja de Pitón: Métodos útiles para la codificación cotidiana

Descubre cómo el troceado puede extraer, reorganizar y analizar tus datos sin esfuerzo. Aprovecha los índices negativos, los cortes multidimensionales y los valores de paso avanzados para una precisión total.
Actualizado 15 ene 2025  · 8 min de lectura

Si estás cansado de lidiar con confusos índices de rebanadas o de preguntarte por qué tus listas de rebanadas no se comportan como esperabas, estás en el lugar adecuado. En esta guía, desglosaremos el corte de Python en trozos digeribles (valga el juego de palabras). Lo cubriremos todo, desde los fundamentos de la sintaxis de troceado hasta técnicas avanzadas con matrices multidimensionales. Además, compartiré ejemplos con aplicaciones reales que puedes utilizar inmediatamente.

Si estás deseando construir una sólida base de Python, consulta también nuestro curso Fundamentos de Python, que está diseñado para ayudarte a dominar habilidades esenciales como el troceado, las estructuras de datos y mucho más.

Comprender el rebanado en Python

Tomémonos un momento para hablar de lo que significa trocear en Python y por qué es útil.

¿Qué es el corte en Python?

El troceado en Python es un método para extraer partes específicas de secuencias como cadenas, listas, tuplas y rangos. Rebanar puede referirse a utilizar la función incorporada slice() o la notación aún más común de corchetes que tiene este aspecto: [start:end:step]. La funcionalidad es una parte esencial del lenguaje Python, por lo quepuedes realizar el corte con o sin importar ningún paquete adicional. El troceado tal y como se realiza en librerías externas como NumPy o pandas presenta algunas diferencias interesantes, que trataré en detalle a continuación.

¿Por qué utilizar el corte en Python?

El corte en Python es una de las herramientas más eficaces e intuitivas para la manipulación de datos. Tanto si analizas conjuntos de datos, como si procesas cadenas o manipulas matrices, el troceado te permite acceder a subconjuntos de datos y manejarlos. 

He aquí por qué todo desarrollador debería dominarlo:

  1. Código limpio y conciso: El troceado elimina la necesidad de bucles repetitivos o condiciones complejas, lo que da como resultado un código más corto, limpio y fácil de depurar.
  2. Procesamiento eficaz de los datos: A diferencia de la indexación manual, la segmentación está optimizada para el rendimiento. Los mecanismos internos de Python garantizan que las operaciones de troceado sean rápidas y eficientes en memoria.
  3. Versatilidad entre estructuras de datos: El rebanado funciona a la perfección en todo el ecosistema de Python, desde cadenas y listas hasta estructuras más avanzadas como matrices NumPy y marcos de datos pandas.
  4. Aplicaciones en el mundo real: El troceado simplifica las tareas cotidianas de codificación. ¿Necesitas procesar sólo un segmento de un conjunto de datos? ¿Extraer columnas concretas de una tabla? ¿O invertir una cadena para un proyecto de análisis de texto? Corta en rodajas.

Métodos básicos para rebanar en Python

Como ya he dicho, el troceado es una función básica de Python, que permite a los desarrolladores extraer partes de secuencias como listas, cadenas y tuplas. Python ofrece dos formas principales de trocear secuencias sin importar nada: la sintaxis de troceado : y la función slice(). Comprender ambos métodos es útil, ya que es muy probable que veas utilizar ambos métodos.

Utilizando el : Sintaxis de corte en Python

La sintaxis de corte sequence[start:stop:step] es la forma más habitual de acceder a partes de una secuencia. Cada parámetro -start, stop, y step- controla cómo se realiza el corte:

  • start: Índice donde comienza el corte (inclusive). Por defecto es 0 si se omite.

  • stop: Índice donde termina el corte (exclusivo). Por defecto, la longitud de la secuencia si se omite.

  • step: Determina el intervalo entre elementos. Por defecto es 1 si se omite.

Pongamos un ejemplo:

numbers = [10, 20, 30, 40, 50, 60]  

print(numbers[1:4])  
# Output: [20, 30, 40]  

print(numbers[:3])   
# Output: [10, 20, 30]  

print(numbers[::2])  
# Output: [10, 30, 50]  

También puedes aplicar este método de corte a cadenas:

text = "Python Slicing"  

print(text[7:])   
# Output: "Slicing"  

print(text[::-1]) 
# Output: "gnicilS nohtyP" (reverses the string)  

Incluso puedes extraer elementos alternativos de una lista con el troceado:

data = [100, 200, 300, 400, 500]  

alternate = data[::2]  

print(alternate)  
# Output: [100, 300, 500]  

En el mundo real, el corte es especialmente útil cuando se trabaja con grandes conjuntos de datos. Supongamos que manejas un archivo de registro con millones de registros y necesitas extraer las últimas 1.000 entradas para analizarlas:

logs = load_large_dataset()  
recent_logs = logs[-1000:]  

Este enfoque evita cargar todo el conjunto de datos en la memoria, garantizando que tu aplicación se ejecute eficientemente.

Utilizando la función slice() de Python

La función slice() de Python proporciona una definición alternativa de los parámetros de corte como objetos de corte reutilizables. Estos objetos encapsulan la lógica de corte y pueden aplicarse a múltiples secuencias.

Sintaxis y uso

La función slice() sigue el formato:

slice(start, stop, step)  

He aquí un ejemplo:

# Create a slice object
slice_obj = slice(1, 4)

# Apply to a list
numbers = [10, 20, 30, 40, 50]
print(numbers[slice_obj])  # Output: [20, 30, 40]

# Apply to a string
text = "Python"
print(text[slice_obj])  # Output: "yth"  

Ventajas de la función slice() de Python

Personalmente, me gusta utilizar la función slice() porque me permite reutilizar el mismo objeto de corte en distintas secuencias, evitando la lógica de corte repetitiva. También facilita la lectura y el mantenimiento del código.

Como puedes ver en el siguiente ejemplo, definimos un objeto slice una vez y lo reutilizamos en varias secuencias. Esto elimina la necesidad de especificar repetidamente los mismos valores start, end, y step. También mejora la reutilización porque al cambiar los límites de la porción en un solo lugar se actualizan automáticamente todos los usos de esa porción

# Define a reusable slice
my_slice = slice(2, 5)

# Apply to multiple sequences
data_list = [100, 200, 300, 400, 500]
data_string = "SlicingExample"

print(data_list[my_slice])  # Output: [300, 400, 500]
print(data_string[my_slice])  # Output: "ici"  

Comparación de ambos métodos

Ambos métodos de corte tienen su lugar en Python. La sintaxis es perfecta para operaciones concisas, mientras que slice() tiene un valor incalculable para la lógica de troceado reutilizable y dinámica.

Función Syntax slice() Función
Facilidad de uso Sencillo para tareas de corte rápido Mejor para la lógica reutilizable
Legibilidad Ideal para rodajas sencillas Añade claridad para cortes complejos
Versatilidad Limitado a un solo uso en código Reutilizable en varias secuencias

Python Slice en Bibliotecas

El rebanado no se limita a las estructuras de datos integradas en Python, sino que se extiende a potentes bibliotecas como NumPy y pandas, que son indispensables para la manipulación de datos. Aunque los principios básicos siguen siendo los mismos, estas bibliotecas introducen capacidades de troceado adicionales adaptadas a sus estructuras de datos.

Rebanar en NumPy

Las matrices NumPy llevan el troceado al siguiente nivel, ofreciendo potentes herramientas para manipular grandes conjuntos de datos multidimensionales. Una diferencia crítica en el troceado NumPy son las vistas frente a las copias: trocear una matriz NumPy suele devolver una vista (una referencia a los datos originales), no una nueva copia. Este comportamiento garantiza la eficacia cuando se trabaja con grandes conjuntos de datos, pero requiere un manejo cuidadoso para evitar cambios involuntarios.

Cortar matrices 1D

import numpy as np  

# Create a 1D array
array = np.array([10, 20, 30, 40, 50])

# Slice elements from index 1 to 3
print(array[1:4])  
# Output: [20 30 40]  

# Apply step
print(array[::2])  
# Output: [10 30 50]  

Cortar matrices multidimensionales

Con matrices multidimensionales, el corte se aplica a cada eje independientemente.

# Create a 2D array
array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Slice the first two rows and first two columns
print(array_2d[:2, :2])  
# Output:
# [[1 2]
#  [4 5]]  

# Slice the last column
print(array_2d[:, -1])  
# Output: [3 6 9]  

Ventajas del troceado NumPy

  1. Eficiencia de la memoria: Las operaciones sobre trozos evitan copiar datos, lo que acelera los cálculos.
  2. Flexibilidad: El corte multidimensional permite un control preciso de los subconjuntos de datos.

Consulta nuestro curso Introducción a la Ciencia de Datos con Python para profundizar en NumPy.

Rebanar en pandas

pandas amplía el rebanado para que funcione sin problemas con DataFrames y Series, introduciendo formas más intuitivas de acceder y manipular datos estructurados. Aunque se basa en el rebanado básico de Python, el rebanado de pandas tiene comportamientos únicos adaptados a los datos tabulares.

Cortar filas y columnas en un Marco de datos

import pandas as pd  

# Create a sample DataFrame
student_data = {'Name': ['Alice', 'Bob', 'Charlie'], 
                'Age': [25, 30, 35], 
                'Score': [85, 90, 95]}

students = pd.DataFrame(student_data

# Slice the first two rows
print(students[:2])  
# Output:
#      Name  Age  Score
# 0   Alice   25     85
# 1     Bob   30     90  

# Slice specific columns by name
print(students[['Name', 'Score']])  
# Output:
#       Name  Score
# 0    Alice     85
# 1      Bob     90
# 2  Charlie     95  

Utilizando .loc[] e .iloc[]

pandas introduce .loc[] (basado en etiquetas) y .iloc[] (basado en índices) para un control más preciso.

# Slice using .iloc (index-based)
print(df.iloc[1:, 1:])  
# Output:
#    Age  Score
# 1   30     90
# 2   35     95  
# Slice using .loc (label-based)
print(df.loc[:1, ['Name', 'Age']])  
# Output:
#    Name  Age
# 0  Alice   25
# 1    Bob   30  

Diferencias clave en el corte de pandas

  • Gama inclusiva: A diferencia del troceado de Python, .loc[] incluye el índice de parada para filas y columnas.

  • Indexación mixta: pandas permite hacer cortes tanto con etiquetas como con posiciones, lo que ofrece una mayor flexibilidad.

Para técnicas avanzadas, explora nuestro curso Manipulación de DataFrames con pandas.

Rebanar en Python con distintos tipos de datos

Veamos ahora ejemplos de troceado en Python con distintos tipos de datos para ver cómo funciona el troceado en distintas estructuras de datos, como cadenas, listas, tuplas o tipos de datos más complejos.

Cortar cuerdas

En Python, las cadenas son secuencias de caracteres, lo que significa que puedes cortarlas como si fueran listas o tuplas. Esto hace que el troceado sea útil para extraer subcadenas, invertir texto o formatear datos. Aquí estoy utilizando :.

Basic string slicing# Extract a substring
text = "Python Slicing"
print(text[7:14])  # Output: Slicing  

# Reverse a string
print(text[::-1])  # Output: gnicilS nohtyP  

La función slice() te permite crear objetos de corte reutilizables para operaciones de corte coherentes.

# Create a slice object
slicer = slice(7, 14)

# Apply the slice object
print(text[slicer])  # Output: Slicing  

Casos prácticos

  • Análisis de datos: Extrae campos específicos de texto estructurado, como filas CSV o archivos de registro.
  • Manipulación de texto: Formatea cadenas eliminando prefijos, sufijos o caracteres no deseados.

Rebanar listas y tuplas

Las listas y las tuplas son estructuras de datos fundamentales de Python, y trocearlas puede simplificar tu trabajo.

Corte básico de listas

# Extract elements from a list
numbers = [10, 20, 30, 40, 50]

print(numbers[1:4])  
# Output: [20, 30, 40]  

# Skip elements using steps
print(numbers[::2])  
# Output: [10, 30, 50]  

Rebanar tuplas

Las tuplas son inmutables, pero el troceado sigue funcionando para extraer partes de ellas.

# Slice a tuple
colors = ("red", "green", "blue", "yellow")

print(colors[:2])  
# Output: ('red', 'green')  

Filtrar y reordenar

Rebanar es una forma práctica de filtrar o reordenar elementos.

# Filter odd-indexed elements
data = [5, 10, 15, 20, 25]

filtered = data[1::2]  
# Output: [10, 20]  

Rebanar en el análisis de datos

En el análisis de datos, el troceado desempeña un papel en la extracción y reorganización de subconjuntos de datos para su posterior examen. Los casos de uso en el análisis de datos incluyen la selección de subconjuntos, en la que extraes filas o columnas relevantes para un análisis centrado, y la transformación de datos, en la que puedes reorganizar conjuntos de datos para una mejor visualización o elaboración de informes.

Rebanar con NumPy

import numpy as np  

# Create a 2D array
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Extract the first two rows
print(data[:2, :])  
# Output:
# [[1 2 3]
#  [4 5 6]]  

Habría mucho más que decir sobre el trabajo con Numpy, pero puedes explorar en profundidad el corte en NumPy con nuestro curso Estructuras de Datos y Algoritmos en Python.

Rebanar con pandas

Una opción es pandas, que proporciona funciones de troceado que te permiten acceder a filas y columnas y manipularlas. Aquí tienes una demostración rápida de cómo trocear tanto filas como columnas en un Marco de datos:

import pandas as pd  

# Create a DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Score': [85, 90, 95]
})

# Slice rows and columns
print(df.loc[:1, ['Name', 'Score']])  
# Output:
#      Name  Score
# 0   Alice     85
# 1     Bob     90  

Técnicas Avanzadas de Rebanado en Python

Una vez que comprendas técnicas más avanzadas, podrás manipular estructuras de datos con una precisión y eficacia impresionantes. Las siguientes técnicas te ayudarán a escribir código Python más limpio y rápido.

Modificar listas con troceado

Uno de los poderes menos conocidos del troceado es su capacidad para modificar listas directamente. Puedes sustituir, insertar o eliminar varios elementos en una sola línea de código.

Sustituye los elementos:

numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30, 40]

print(numbers)
# Output: [1, 20, 30, 40, 5]

Inserta elementos:

numbers = [1, 2, 5]
numbers[2:2] = [3, 4]  

print(numbers)
# Output: [1, 2, 3, 4, 5]

Eliminar elementos:

numbers = [1, 2, 3, 4, 5]
numbers[1:4] = []

print(numbers)
# Output: [1, 5]

Eficiencia de la memoria

Entender si Python crea una copia o una vista es esencial para la gestión de la memoria al trocear estructuras de datos, especialmente con grandes conjuntos de datos. Debes saber que conlas listas y cadenas integradas en , el corte siempre crea una copia de la secuencia original, pero con las matrices NumPy, el corte crea una vista, lo que significa que tanto la matriz original como el corte apuntan a los mismos datos en memoria .

En el código siguiente, nuestra operación de troceado crea una vista de la matriz NumPy original en lugar de una copia. Esto significa que tanto arr como sliced hacen referencia a los mismos datos subyacentes en memoria. En consecuencia, modificar sliced afecta directamente a arr.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
sliced = arr[1:4]
sliced[0] = 99

print(arr)
# Output: [1, 99, 3, 4, 5]

Ten siempre cuidado cuando modifiques trozos en bibliotecas externas para evitar efectos secundarios involuntarios.

Consideración de casos especiales

Rebanar es potente, pero no infalible. He aquí los escollos más comunes:

Rebanar fuera de los límites

numbers = [1, 2, 3]

print(numbers[5:10])
# Output: []

Rebanar fuera de los límites no genera un error, simplemente devuelve una lista vacía.

Rodajas vacías

numbers = [1, 2, 3]

print(numbers[1:1])
# Output: []

Cuando los índices de inicio y fin son iguales, el resultado es un corte vacío.

Comportamiento confuso de los pasos

numbers = [1, 2, 3, 4, 5]

print(numbers[::-2])
# Output: [5, 3, 1]

El paso -2 corta la lista en sentido inverso, saltándose cada dos elementos.

Indexación negativa

La indexación negativa te permite cortar secuencias empezando por el final en lugar del principio.

Acceder a los últimos elementos

numbers = [1, 2, 3, 4, 5]

print(numbers[-1])  # Last element
# Output: 5

Anular una lista

numbers = [1, 2, 3, 4, 5]

print(numbers[::-1])  # Reverse the list
# Output: [5, 4, 3, 2, 1]

La indexación negativa es especialmente útil cuando se trabaja con longitudes de secuencia desconocidas o cuando se procesan datos hacia atrás.

Corte multidimensional

El corte no se limita a las estructuras unidimensionales. En bibliotecas como NumPy, puedes trocear matrices multidimensionales con precisión.

import numpy as np

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Extract a sub-matrix
sub_matrix = matrix[:2, 1:]

print(sub_matrix)
# Output:
# [[2, 3],
#  [5, 6]]

Consejos para el corte multidimensional:

  1. Utiliza comas para separar los cortes de cada dimensión.

  2. Evita mezclar índices negativos y cortes por defecto : de forma que creen ambigüedad.

Consejo de depuración: Imprime siempre cortes intermedios al depurar cortes multidimensionales para asegurarte de que te diriges al subconjunto correcto.

Errores comunes en el corte de Python

El corte en Python es potente, pero no es inmune a los errores. Algunos errores comunes pueden hacer tropezar incluso a desarrolladores experimentados. Comprender estos problemas y sus soluciones es esencial para un código limpio y preciso.

Cometer un error fuera de lugar

Se produce un error de desviación cuando los índices de inicio o fin de tus operaciones de troceado incluyen o excluyen elementos no deseados. Éste es uno de los problemas más comunes en el troceado y puede provocar resultados imprecisos o fallos en tu código.

numbers = [1, 2, 3, 4, 5]

# Intending to extract [2, 3, 4]
slice_result = numbers[1:3]

print(slice_result)
# Output: [2, 3]

Aquí, el índice de parada excluye el elemento en el índice 3, provocando una omisión involuntaria. Cómo evitar este error:

  • Comprende la regla del índice de parada: El índice de parada en el corte es exclusivo, lo que significa que no se incluye en el resultado. Añade siempre 1 al índice de parada si quieres incluir ese elemento.
  • Utiliza longitudes explícitas: Si tu rebanada debe incluir un rango específico de índices, confirma que el cálculo de inicio a fin coincide con tu intención.

Aquí tienes un ejemplo corregido:

numbers = [1, 2, 3, 4, 5]
slice_result = numbers[1:4]

print(slice_result)
# Output: [2, 3, 4]

Malinterpretar los valores de los pasos

Los valores de paso determinan cuántos elementos saltar entre índices al trocear. Entender mal cómo funcionan los valores de los pasos puede llevar a resultados inesperados, especialmente con pasos negativos.

Omitir pocos o demasiados elementos

numbers = [1, 2, 3, 4, 5]
# Expecting every second element

step_result = numbers[::3]

print(step_result)
# Output: [1, 4]

Aquí, un paso de 3 omite demasiados elementos, lo que da lugar a menos valores de los esperados. El código siguiente es un ejemplo de pasos negativos confusos.

numbers = [1, 2, 3, 4, 5]
step_result = numbers[::-2]

print(step_result)
# Output: [5, 3, 1]

Los pasos negativos invierten la lista saltándose elementos, pero malinterpretar su comportamiento puede dificultar la predicción del resultado. Esto es lo que tengo en cuenta cuando pienso en cómo utilizar correctamente los valores de paso:

  • Planifica tus intervalos: Asegúrate de que el valor del paso coincide con el intervalo que necesitas. Para cada segundo elemento, utiliza un step de 2.

  • Prueba los pasos negativos de forma aislada: Experimenta con pequeños ejemplos para confirmar que entiendes cómo se comportan las rodajas invertidas.

  • Combina valores de paso con índices de inicio/parada: Utiliza índices de inicio y parada para limitar el alcance del corte mientras aplicas valores de paso.

Aquí tienes un ejemplo corregido de un mejor uso de los pasos:

Every second element:
numbers = [1, 2, 3, 4, 5]

print(numbers[::2])
# Output: [1, 3, 5]

Reverse with a step:
numbers = [1, 2, 3, 4, 5]

print(numbers[4::-2])
# Output: [5, 3, 1]

No seguir las mejores prácticas

Aquí tienes algunas buenas ideas para no cometer errores:

  1. Visualiza tus rodajas: Utiliza comentarios o sentencias print para verificar tu lógica de troceado.

  2. Practica con ejemplos: Empieza con listas pequeñas y sencillas para poner a prueba tu comprensión de los parámetros de inicio, parada y paso.

  3. Utiliza funciones integradas para mayor claridad: En caso de duda, crea cortes con la función slice() para una lógica de corte más explícita.

Conclusión

A lo largo de esta guía, hemos explorado conceptos como:

  • Los fundamentos de la sintaxis y los parámetros del corte, incluyendo start, stopy step.

  • Técnicas interesantes como la modificación de listas con slicing, teniendo en cuenta las prácticas de eficiencia de memoria y el manejo de datos multidimensionales.

  • Los errores que comete la gente, como los errores de paso y los malentendidos de los valores de paso, y cómo evitarlos.

La mejor forma de consolidar tus conocimientos es mediante la práctica. Experimenta con conjuntos de datos del mundo real, prueba casos extremos y desafíate a ti mismo yendo más allá de lo básico.

DataCamp está aquí para ayudarte. Prueba nuestro curso sobre Manipulación de Datos con Python y otros cursos como Desarrollo de Paquetes Python para una experiencia de aprendizaje interactiva. Tanto si eres principiante como si quieres perfeccionar tus técnicas, estos recursos pueden ayudarte a dominar el corte y otras habilidades.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Redactor técnico especializado en IA, ML y ciencia de datos, que hace que las ideas complejas sean claras y accesibles.

Temas

Aprende Python con DataCamp

curso

Introduction to Python

4 hr
6M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

21 herramientas esenciales de Python

Conozca las herramientas esenciales de Python para el desarrollo de software, raspado y desarrollo web, análisis y visualización de datos y aprendizaje automático.
Abid Ali Awan's photo

Abid Ali Awan

6 min

tutorial

Optimización en Python: Técnicas, Paquetes y Buenas Prácticas

Este artículo te enseña la optimización numérica, destacando diferentes técnicas. Analiza paquetes de Python como SciPy, CVXPY y Pyomo, y proporciona un práctico cuaderno DataLab para ejecutar ejemplos de código.
Kurtis Pykes 's photo

Kurtis Pykes

19 min

tutorial

Las mejores técnicas para gestionar valores perdidos que todo científico de datos debe conocer

Explore varias técnicas para manejar eficazmente los valores perdidos y sus implementaciones en Python.
Zoumana Keita 's photo

Zoumana Keita

15 min

tutorial

Aprendizaje automático de datos categóricos con el tutorial de Python

Aprenda los trucos más comunes para manejar datos categóricos y preprocesarlos para construir modelos de aprendizaje automático.
Moez Ali's photo

Moez Ali

28 min

tutorial

Tutorial de Pandas: DataFrames en Python

Explora el análisis de datos con Python. Los DataFrames de Pandas facilitan la manipulación de tus datos, desde la selección o sustitución de columnas e índices hasta la remodelación de tus datos.
Karlijn Willems's photo

Karlijn Willems

20 min

tutorial

Multiprocesamiento en Python: Guía de hilos y procesos

Aprende a gestionar hilos y procesos con el módulo de multiprocesamiento de Python. Descubre las técnicas clave de la programación paralela. Mejora la eficacia de tu código con ejemplos.
Kurtis Pykes 's photo

Kurtis Pykes

7 min

Ver másVer más