Y en Python

Y en Python

Un deque significa cola de doble extremo. Es un tipo especial de estructura de datos que le permite agregar y eliminar elementos de ambos extremos de manera eficiente.

A diferencia de las colas normales (que generalmente siguen el orden de entrada, primero en salir), una deque admite operaciones FIFO y LIFO. Esto lo hace muy flexible y útil en aplicaciones del mundo real, como la programación de tareas, problemas de ventanas deslizantes y procesamiento de datos en tiempo real.

Ejemplo:

Python
   from   collections   import   deque   # Declaring deque    de   =   deque  ([  'name'    'age'    'DOB'  ])   print  (  de  )   

Producción
deque(['name' 'age' 'DOB'])  
Por lo tanto

¿Por qué necesitamos deque?

  • Admite tiempo O(1) para agregar/eliminar elementos de ambos extremos.
  • Es más eficiente que las listas para operaciones de front-end.
  • Puede funcionar como cola (FIFO) y como pila (LIFO).
  • Ideal para programar problemas de ventanas deslizantes y procesamiento de datos en tiempo real.
  • Ofrece potentes métodos integrados como anexar a la izquierda() popizquierda() y girar().

Tipos de entrada deque restringida

  • Deque restringido de entrada :  La entrada está limitada en un extremo, mientras que se permite la eliminación en ambos extremos.
  • Salida restringida Deque : la salida está limitada en un extremo pero se permite la inserción en ambos extremos.

Operaciones en deque 

Aquí hay una tabla que enumera las operaciones integradas de una deque en Python con descripciones y sus correspondientes complejidades temporales:

Operación Descripción Complejidad del tiempo
agregar(x) Agrega x al extremo derecho del deque. O(1)
anexar a la izquierda (x) Agrega x al extremo izquierdo del deque. O(1)
estallido() Elimina y devuelve un elemento del extremo derecho del deque. O(1)
popizquierda() Elimina y devuelve un elemento del extremo izquierdo del deque. O(1)
extender (iterable) Agrega todos los elementos de iterable al extremo derecho del deque. Está bien)
extender a la izquierda (iterable) Agrega todos los elementos de iterable al extremo izquierdo del deque (orden inverso). Está bien)
eliminar (valor) Elimina la primera aparición de value del deque. aumentos ValueError si no se encuentra. En)
rotar(n) Gira el deque n pasos a la derecha. Si n es negativo gira hacia la izquierda. Está bien)
claro() Elimina todos los elementos del deque. En)
contar(valor) Cuenta el número de ocurrencias de value en el deque. En)
índice (valor) Devuelve el índice de la primera aparición de value en el deque. aumentos ValueError si no se encuentra. En)
contrarrestar() Invierte los elementos del deque en su lugar. En)

Agregar y eliminar elementos de la cola

  • añadir(x): Agrega x al extremo derecho del deque.
  • anexar a la izquierda (x): Agrega x al extremo izquierdo del deque.
  • extender (iterable): Agrega todos los elementos desde el iterable hasta el extremo derecho.
  • extenderizquierda(iterable): Agrega todos los elementos desde el iterable hasta el extremo izquierdo (en orden inverso).
  • eliminar (valor): Elimina la primera aparición del valor especificado de la deque. Si no se encuentra el valor, genera un ValueError.
  • estallido(): Elimina y devuelve un elemento desde el extremo derecho.
  • popizquierda(): Elimina y devuelve un elemento del extremo izquierdo.
  • claro(): Elimina todos los elementos del deque.
Python
   from   collections   import   deque   dq   =   deque  ([  10     20     30  ])   # Add elements to the right   dq  .  append  (  40  )   # Add elements to the left   dq  .  appendleft  (  5  )   # extend(iterable)   dq  .  extend  ([  50     60     70  ])   print  (  'After extend([50 60 70]):'     dq  )   # extendleft(iterable)   dq  .  extendleft  ([  0     5  ])   print  (  'After extendleft([0 5]):'     dq  )   # remove method   dq  .  remove  (  20  )   print  (  'After remove(20):'     dq  )   # Remove elements from the right   dq  .  pop  ()   # Remove elements from the left   dq  .  popleft  ()   print  (  'After pop and popleft:'     dq  )   # clear() - Removes all elements from the deque   dq  .  clear  ()   # deque: []   print  (  'After clear():'     dq  )   

Producción:

 After extend([50 60 70]): deque([5 10 20 30 40 50 60 70])   
After extendleft([0 5]): deque([5 0 5 10 20 30 40 50 60 70])
After remove(20): deque([5 0 5 10 30 40 50 60 70])
After pop and popleft: deque([0 5 10 30 40 50 60])
After clear(): deque([])

Acceso al elemento y duración del deque

  • Indexación: Accede a elementos por posición mediante índices positivos o negativos.
  • solo(): Devuelve el número de elementos del deque.
Python
   import   collections   dq   =   collections  .  deque  ([  1     2     3     3     4     2     4  ])   # Accessing elements by index   print  (  dq  [  0  ])   print  (  dq  [  -  1  ])   # Finding the length of the deque   print  (  len  (  dq  ))   

Producción
1 4 7  

Contar la rotación y la inversión de un deque

  • contar(valor): Este método cuenta el número de apariciones de un elemento específico en la deque.
  • rotar(n): Este método rota el deque en n pasos. El n positivo gira hacia la derecha y el n negativo gira hacia la izquierda.
  • contrarrestar(): Este método invierte el orden de los elementos en el deque.
Python
   from   collections   import   deque   # Create a deque   dq   =   deque  ([  10     20     30     40     50     20     30     20  ])   # 1. Counting occurrences of a value   print  (  dq  .  count  (  20  ))   # Occurrences of 20   print  (  dq  .  count  (  30  ))   # Occurrences of 30   # 2. Rotating the deque   dq  .  rotate  (  2  )   # Rotate the deque 2 steps to the right   print  (  dq  )   dq  .  rotate  (  -  3  )   # Rotate the deque 3 steps to the left   print  (  dq  )   # 3. Reversing the deque   dq  .  reverse  ()   # Reverse the deque   print  (  dq  )   

Producción
3 2 deque([30 20 10 20 30 40 50 20]) deque([20 30 40 50 20 30 20 10]) deque([10 20 30 20 50 40 30 20])