Szukaj…


Składnia

  • dq = deque () # Tworzy pusty deque
  • dq = deque (iterable) # Tworzy deque z niektórymi elementami
  • dq.append (object) # Dodaje obiekt po prawej stronie deque
  • dq.appendleft (object) # Dodaje obiekt po lewej stronie deque
  • dq.pop () -> obiekt # Usuwa i zwraca najbardziej prawy obiekt
  • dq.popleft () -> obiekt # Usuwa i zwraca obiekt znajdujący się najbardziej po lewej stronie
  • dq.extend (iterable) # Dodaje niektóre elementy po prawej stronie deque
  • dq.extendleft (iterable) # Dodaje niektóre elementy po lewej stronie deque

Parametry

Parametr Detale
iterable Tworzy deque z elementami początkowymi skopiowanymi z innej iterowalnej.
maxlen Ogranicza wielkość deque, wypychając stare elementy jak nowe są dodawane.

Uwagi

Ta klasa jest przydatna, gdy potrzebujesz obiektu podobnego do listy, który umożliwia szybkie dodawanie i pop operacji z każdej strony (nazwa deque oznacza „ kolejkę podwójnie zakończoną ”).

Podane metody są rzeczywiście bardzo podobne, z tym wyjątkiem, że niektóre takie jak pop , append lub extend mogą być poprzedzone left . deque danych deque powinna być preferowana w stosunku do listy, jeśli trzeba często wstawiać i usuwać elementy na obu końcach, ponieważ pozwala to robić w stałym czasie O (1).

Podstawowe użycie deque

Główne metody przydatne w tej klasie to popleft i 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])

ogranicz wielkość deque

Użyj parametru maxlen podczas tworzenia deque, aby ograniczyć rozmiar 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)

Dostępne metody w deque

Tworzenie pustego deque:

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

Tworzenie deque z niektórymi elementami:

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

Dodawanie elementu do deque:

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

Dodawanie elementu po lewej stronie deque:

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

Dodawanie listy elementów do deque:

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

Dodawanie listy elementów do z lewej strony:

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

Użycie elementu .pop() naturalnie usunie element z prawej strony:

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

Użycie elementu .popleft() do usunięcia elementu z lewej strony:

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

Usuń element według jego wartości:

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

Odwróć kolejność elementów w deque:

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

Szerokość Pierwsze wyszukiwanie

Deque to jedyna struktura danych w języku Python z szybkimi operacjami kolejkowania . (Uwaga queue.Queue zwykle nie jest odpowiednia, ponieważ jest przeznaczona do komunikacji między wątkami). Podstawowym przypadkiem użycia kolejki jest pierwsze wyszukiwanie szerokości .

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

Powiedzmy, że mamy prosty skierowany wykres:

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

Możemy teraz znaleźć odległości od pozycji początkowej:

>>> 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow