Deque-Analogia
Analogía: La Fila del Banco vs Cajero Multifuncional
Lista normal = Fila tradicional del banco
fila_banco = ["Persona A", "Persona B", "Persona C"]Solo puedes atender por UN extremo (el principio)
Si alguien nuevo llega, se forma al final
Si quieres sacar a alguien del medio: ¡caos! (ineficiente)
Deque = Cajero automático multifuncional
from collections import deque
cajero_multifuncional = deque(["Persona A", "Persona B", "Persona C"])Puedes atender por AMBOS extremos
Personas pueden llegar por delante o por detrás
Puedes atender urgencias por cualquier lado
🔄 Diferencia Técnica Clave
Con Lista (solo un lado eficiente):
cola_lista = [1, 2, 3]
# EFICIENTE ✓
cola_lista.append(4) # agregar al final → [1, 2, 3, 4]
ultimo = cola_lista.pop() # sacar del final → [1, 2, 3]
# INEFICIENTE ✗
cola_lista.insert(0, 0) # agregar al principio → LENTO!
primero = cola_lista.pop(0) # sacar del principio → MUY LENTO!Con Deque (ambos lados eficientes):
cola_deque = deque([1, 2, 3])
# EFICIENTE EN AMBOS LADOS ✓
cola_deque.append(4) # agregar al final → deque([1, 2, 3, 4])
cola_deque.appendleft(0) # agregar al principio → deque([0, 1, 2, 3, 4])
ultimo = cola_deque.pop() # sacar del final → deque([0, 1, 2, 3])
primero = cola_deque.popleft() # sacar del principio → deque([1, 2, 3])🎯 Respondiendo tu pregunta específica
"¿Si aplico deque a una cola la vuelvo una lista?"
¡NO exactamente! Más bien: "Conviertes una cola RESTRINGIDA en una cola FLEXIBLE"
Cola Normal (FIFO):
Entrada: [ ] → [A] → [A,B] → [A,B,C]
Salida: A ← [B,C] ← B ← [C] ← C ← [ ]Solo entra por un lado, sale por el otro
Cola con Deque (Doble Entrada/Salida):
Entradas: ← [A,B,C] →
(por izquierda) (por derecha)
Salidas: ← [A,B,C] →
(por izquierda) (por derecha)🚀 Ejemplo Real: Sistema de Prioridades
from collections import deque
class SistemaAtencion:
def __init__(self):
self.cola_normal = deque()
self.urgentes = 0
def llegar_paciente(self, nombre, urgente=False):
if urgente:
self.cola_normal.appendleft(nombre) # Urgente al frente
self.urgentes += 1
else:
self.cola_normal.append(nombre) # Normal al final
def atender_paciente(self):
if self.cola_normal:
return self.cola_normal.popleft()
return "No hay pacientes"
def ver_cola(self):
return list(self.cola_normal)
# Uso
hospital = SistemaAtencion()
hospital.llegar_paciente("Juan") # Normal
hospital.llegar_paciente("Maria") # Normal
hospital.llegar_paciente("Carlos", True) # Urgente → va al frente!
print(hospital.ver_cola()) # ['Carlos', 'Juan', 'Maria']
print(hospital.atender_paciente()) # Carlos (urgente primero)💡 En Resumen
Lista: Como una fila normal - orden estricto
Deque: Como fila con "acceso VIP" por ambos lados + posibilidad de atender urgencias
¿Cuándo usar cada uno?
Usa lista si solo necesitas agregar/sacar por el final
Usa deque si necesitas eficiencia en AMBOS extremos
¡El deque no reemplaza la lista, sino que extiende sus capacidades para casos específicos! ¿Te quedó más claro
Comentarios
Publicar un comentario