o simplemente deque, es un tipo de colección poco común. Si buscamos en Internet encontraremos mucha información sobre listas, diccionarios y tuplas, pero poca sobre deque.
Deque (también puedes pronunciarlo “deck”) es un tipo de colección interesante y útil en Python. Lo que lo diferencia de otros objetos es que contendrá solo la cantidad de elementos que desee o menos, nunca más.
Una cola de dos extremos contendrá solo la cantidad de elementos que usted determine. Nunca más.
Por lo tanto, funciona como una plataforma utilizando el sistema FIFO (First In, First Out). Una vez que el mazo esté lleno, si agrega otro elemento, soltará el primer elemento a la izquierda y agregará el nuevo a la derecha.
Veamos algunos ejemplos básicos para entender esta colección. Primero, impórtelo desde colecciones: desde colecciones importe deque.
Creando un deque
A continuación, crearemos una plataforma simple y le agregaremos una longitud máxima de 3 elementos.
# Crear un nuevo deque con 3 (o menos) elementos my_deck = deque(maxlen = 3) # Agregar un elemento my_deck.append(1) my_deck.append(2) my_deck.append(3) # Ver my_deck # deque([1, 2, 3])
Lindo. Una vez que nuestro mazo esté lleno, observe lo que sucede cuando intento agregarle otro valor. El primer elemento de la izquierda (1) se elimina, lo que abre espacio para el nuevo elemento agregado a la derecha (extra).
# Elimina el primer elemento y agrega el nuevo al final. my_deck.append(‘extra’) deque([2, 3, ‘extra’])
Funciona igual que una plataforma utilizando el sistema FIFO (First In, First Out).
Agregar elementos a la izquierda
Ahora, recuerde que la colección se denomina cola de doble extremo; por lo tanto, también puede agregar o extender elementos hacia la izquierda. En ese caso, naturalmente, eliminará el elemento del extremo derecho.
# Agregar a la izquierda my_deck.appendleft(‘left’) # [OUT]: deque([‘left’, 2, 3]) # Extender hacia la izquierda my_deck.extendleft([‘d’, ‘d’]) #[OUT]: deque([‘d’, ‘d’, ‘left’])
Rotar elementos
También puedes rotar los elementos, moviéndolos una (o más) posiciones hacia la derecha o hacia la izquierda.
# Crear un nuevo deque con 3 (o menos) elementos my_deck = deque(maxlen = 3) # Agregar un elemento my_deck.extend([1,2,3]) #deque([1, 2, 3]) # Rotar los elementos una posición hacia la derecha my_deck.rotate() # deque([3, 1, 2]) # Girar a la izquierda my_deck.rotate(-1) # deque([1, 2, 3])
Además de la rotación, es fácil invertir completamente la plataforma.
# Nuevo mazo my_deck.extend([1, 2, 3]) #[OUT]: deque([1, 2, 3]) # Cubierta inversa my_deck.reverse() # [OUT]: deque([3, 2, 1])
Eliminar elementos
En una plataforma, puedes eliminar un elemento de la izquierda, de la derecha o por su nombre.
# Nuevo mazo my_deck = deque(maxlen = 3) my_deck.extend([1, 2, 3]) # [OUT]: deque([1, 2, 3]) # Eliminar elemento de la izquierda my_deck.popleft() # [OUT]: deque([2, 3]) #— # Nuevo mazo my_deck = deque(maxlen = 3) my_deck.extend([1, 2, 3]) # [OUT]: deque([1, 2, 3]) # Eliminar elemento de la derecha my_deck.pop() # [OUT]: deque([1, 2]) #— # Nuevo mazo my_deck = deque(maxlen = 3) my_deck.extend([1, ‘a’, 3]) # [OUT]: deque([1, ‘a’, 3]) # Eliminar elemento por nombre my_deck.remove(‘a’) # [OUT]: deque([1, 3])
También puedes eliminar todos los elementos y limpiar tu mazo.
mi_cubierta.clear() #[OUT]: deque([])
Aplicaciones
1. El “Historial de búsqueda reciente” (Administración de memoria)
Mientras que las listas crecen indefinidamente, deque tiene un parámetro maxlen. Esto es perfecto para funciones como “Vistos recientemente” o “Historial de búsqueda reciente”, donde solo desea conservar los últimos N elementos sin eliminar manualmente los antiguos.
# Mantener solo las últimas 3 búsquedas de usuarios search_history = deque(maxlen=3) search_history.append(“Tutoriales de Python”) search_history.append(“Aprendizaje automático”) search_history.append(“Ciencia de datos”) search_history.append(“Aprendizaje profundo”) # Los “tutoriales de Python” se eliminan automáticamente print(list(search_history)) # Salida: [‘Machine Learning’, ‘Data Science’, ‘Deep Learning’]
2. Transmisión de datos en vivo y medias móviles
En ciencia de datos o IoT, a menudo es necesario calcular un promedio móvil de un flujo (como sensores de temperatura o precios de acciones). El uso de una deque le permite mantener una “ventana deslizante” de datos de manera eficiente.
def moving_average(stream, window_size=5): window = deque(maxlen=window_size) for val in stream: window.append(val) if len(window) == window_size: yield sum(window) / window_size # Uso: Calcular el promedio de un flujo de lectura de sensor data_stream = [20, 21, 20, 22, 23, 25, 24]
imprimir (lista (promedio_movimiento (flujo_datos, tamaño_ventana = 3)))
3. Colas de tareas multiproceso (seguridad de subprocesos)
Uno de los beneficios “ocultos” de deque en CPython es que .append() y .popleft() son seguros para subprocesos. Esto lo convierte en una excelente opción para un patrón simple de productor-consumidor donde un hilo agrega tareas y otro las ejecuta.
importar subprocesos desde colecciones import deque task_queue = deque() def productor(): for i in range(5): task_queue.append(f”Tarea {i}”) # Agregar seguro para subprocesos def consumer(): while True: intente: tarea = task_queue.popleft() # Impresión pop segura para subprocesos (f”Procesando {tarea}”) excepto IndexError: break
Veámoslo en acción.
# Generar tareas productor() task_queue # [OUT] deque([‘Task 0’, ‘Task 1’, ‘Task 2’, ‘Task 3’, ‘Task 4’]) # Consumir Tareas consumidor() # [OUT]
# Tarea de procesamiento 0 # Tarea de procesamiento 1 # Tarea de procesamiento 2 # Tarea de procesamiento 3 # Tarea de procesamiento 4 # Cola de verificación task_queue # [OUT] deque([])
Antes de ir
Bueno, ahora conoces otro tipo de colección de Python. Podrás dejar fluir tu creatividad y encontrar nuevas formas de crear tu programa o guión.
El resumen de este artículo es simple:
Sintaxis: deque(maxlen = n) donde n es el número de elementos que se almacenarán en su mazo. De forma predeterminada, eliminará el primer elemento de la izquierda cuando agregue uno nuevo a una plataforma completa. La colección deque acepta cualquier tipo de objetos, como int, float, string, dataframe, etc. Hay muchos métodos para manipularlo, como invertir, borrar, rotar, appendleft.
Si este contenido es interesante para ti, lee más sobre mi trabajo en mi sitio web.
https://gustavorsantos.me
Referencias
colecciones: tipos de datos de contenedor
Deque en Python – GeeksforGeeks