Rotación de Listas con Estructuras de Datos de Python
Python ofrece varias estructuras de datos y funciones incorporadas que se pueden utilizar para implementar la rotación de listas. En esta sección, exploraremos los diferentes enfoques y sus ventajas y desventajas.
Usando el Operador de Segmentación (Slicing)
Una de las formas más simples de rotar una lista en Python es utilizando el operador de segmentación (slicing). Este método consiste en dividir la lista en dos partes y luego concatenarlas en el orden deseado.
## Rotate a list to the right by 2 positions
my_list = [1, 2, 3, 4, 5]
rotated_list = my_list[-2:] + my_list[:-2]
print(rotated_list) ## Output: [4, 5, 1, 2, 3]
El operador de segmentación my_list[-2:]
selecciona los últimos dos elementos de la lista, y my_list[:-2]
selecciona todos los elementos excepto los últimos dos. Al concatenar estas dos partes, rotamos efectivamente la lista hacia la derecha 2 posiciones.
Usando el Módulo collections.deque
El módulo collections.deque
en Python proporciona una estructura de datos de cola doblemente terminada (deque) que se puede utilizar para rotar listas de manera eficiente. El método rotate()
de la clase deque
te permite rotar los elementos en cualquier dirección.
from collections import deque
## Rotate a list to the left by 3 positions
my_list = [1, 2, 3, 4, 5]
deque_obj = deque(my_list)
deque_obj.rotate(-3)
rotated_list = list(deque_obj)
print(rotated_list) ## Output: [4, 5, 1, 2, 3]
En este ejemplo, primero convertimos la lista en un objeto deque
, luego usamos el método rotate()
para desplazar los elementos hacia la izquierda 3 posiciones. Finalmente, convertimos el objeto deque
de nuevo en una lista.
Usando la Función numpy.roll()
Si estás trabajando con matrices (arrays) de NumPy, puedes usar la función numpy.roll()
para rotar los elementos a lo largo de un eje especificado. Este enfoque es especialmente útil cuando se trabaja con matrices multidimensionales, como imágenes.
import numpy as np
## Rotate a 2D array to the right by 1 position
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
rotated_array = np.roll(my_array, 1, axis=1)
print(rotated_array)
## Output:
## [[3 1 2]
## [6 4 5]
## [9 7 8]]
En este ejemplo, creamos una matriz 2D de NumPy y usamos la función np.roll()
para rotar los elementos a lo largo del segundo eje (columnas) 1 posición hacia la derecha.
Cada uno de estos enfoques tiene sus propias ventajas y desventajas en términos de rendimiento, legibilidad y flexibilidad. La elección del método dependerá de tu caso de uso específico y de los requisitos de tu proyecto.