Buscar..


Sintaxis

  • dq = deque () # Crea un deque vacío
  • dq = deque (iterable) # Crea un deque con algunos elementos
  • dq.append (objeto) # Agrega un objeto a la derecha del deque
  • dq.appendleft (objeto) # Agrega un objeto a la izquierda del deque
  • dq.pop () -> object # Elimina y devuelve el objeto más a la derecha
  • dq.popleft () -> object # Elimina y devuelve el objeto más a la izquierda
  • dq.extend (iterable) # Agrega algunos elementos a la derecha del deque
  • dq.extendleft (iterable) # Agrega algunos elementos a la izquierda del deque

Parámetros

Parámetro Detalles
iterable Crea el deque con elementos iniciales copiados de otro iterable.
maxlen Limita qué tan grande puede ser el deque, eliminando elementos antiguos a medida que se agregan nuevos.

Observaciones

Esta clase es útil cuando necesita un objeto similar a una lista que permita operaciones rápidas de agregar y abrir desde cualquier lado (el nombre deque significa " cola de doble extremo ").

Los métodos proporcionados son, de hecho, muy similares, excepto que algunos como el pop , el append o la extend pueden incluir con el sufijo left . La estructura de datos de deque debería ser preferible a una lista si uno necesita insertar y eliminar elementos con frecuencia en ambos extremos porque permite hacerlo en tiempo constante O (1).

Uso básico deque

Los principales métodos que son útiles con esta clase son popleft y appendleft

from collections import deque

d = deque([1, 2, 3])
p = d.popleft()        # p = 1, d = deque([2, 3])
d.appendleft(5)        # d = deque([5, 2, 3])

límite de tamaño de salida

Use el parámetro maxlen mientras crea un deque para limitar el tamaño del deque:

from collections import deque
d = deque(maxlen=3)  # only holds 3 items
d.append(1)  # deque([1])
d.append(2)  # deque([1, 2])
d.append(3)  # deque([1, 2, 3])
d.append(4)  # deque([2, 3, 4]) (1 is removed because its maxlen is 3)

Métodos disponibles en deque.

Creando deque vacío:

dl = deque()  # deque([]) creating empty deque

Creando deque con algunos elementos:

dl = deque([1, 2, 3, 4])  # deque([1, 2, 3, 4])

Añadiendo elemento a deque:

dl.append(5)  # deque([1, 2, 3, 4, 5])

Añadiendo elemento del lado izquierdo del deque:

dl.appendleft(0)  # deque([0, 1, 2, 3, 4, 5])

Añadiendo lista de elementos a deque:

dl.extend([6, 7])  # deque([0, 1, 2, 3, 4, 5, 6, 7])

Añadiendo lista de elementos desde el lado izquierdo:

dl.extendleft([-2, -1])  # deque([-1, -2, 0, 1, 2, 3, 4, 5, 6, 7])

El uso del elemento .pop() eliminará naturalmente un elemento del lado derecho:

dl.pop()  # 7 => deque([-1, -2, 0, 1, 2, 3, 4, 5, 6])

Usando el elemento .popleft() para eliminar un elemento del lado izquierdo:

dl.popleft()  # -1 deque([-2, 0, 1, 2, 3, 4, 5, 6])

Eliminar elemento por su valor:

dl.remove(1)  # deque([-2, 0, 2, 3, 4, 5, 6])

Invertir el orden de los elementos en deque:

dl.reverse()  # deque([6, 5, 4, 3, 2, 0, -2])

Amplia primera búsqueda

Deque es la única estructura de datos de Python con operaciones rápidas de cola . (Tenga en cuenta queue.Queue normalmente no es adecuado, ya que está destinado a la comunicación entre subprocesos). Un caso de uso básico de una cola es la primera búsqueda de amplitud .

from collections import deque

def bfs(graph, root):
    distances = {}
    distances[root] = 0
    q = deque([root])
    while q:
        # The oldest seen (but not yet visited) node will be the left most one.
        current = q.popleft()
        for neighbor in graph[current]:
            if neighbor not in distances:
                distances[neighbor] = distances[current] + 1
                # When we see a new node, we add it to the right side of the queue.
                q.append(neighbor)
    return distances

Digamos que tenemos un gráfico dirigido simple:

graph = {1:[2,3], 2:[4], 3:[4,5], 4:[3,5], 5:[]}

Ahora podemos encontrar las distancias desde alguna posición inicial:

>>> bfs(graph, 1)
{1: 0, 2: 1, 3: 1, 4: 2, 5: 2}

>>> bfs(graph, 3)
{3: 0, 4: 1, 5: 1}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow