Suche…


Syntax

  • dq = deque () # Erzeugt ein leeres Deque
  • dq = deque (iterable) # Erzeugt einen Deque mit einigen Elementen
  • dq.append (object) # Fügt ein Objekt rechts von der Deque hinzu
  • dq.appendleft (object) # Fügt ein Objekt links vom Deque hinzu
  • dq.pop () -> object # Entfernt das Objekt ganz rechts und gibt es zurück
  • dq.popleft () -> object # Entfernt das linke Objekt und gibt es zurück
  • dq.extend (iterable) # Fügt einige Elemente rechts vom Deque hinzu
  • dq.extendleft (iterable) # Fügt einige Elemente links vom Deque hinzu

Parameter

Parameter Einzelheiten
iterable Erzeugt den Deque mit ursprünglichen Elementen, die von einem anderen iterierbaren Element kopiert wurden.
maxlen Begrenzt, wie groß der Deque sein kann, wobei alte Elemente als neue ausgegeben werden.

Bemerkungen

Diese Klasse ist nützlich, wenn Sie ein Objekt benötigen, das einer Liste ähnelt, die schnelle Anhänge- und Popoperationen von beiden Seiten zulässt (der Name deque steht für " double-ended queue ").

Die zur Verfügung gestellten Methoden sind in der Tat sehr ähnlich, mit der Ausnahme, dass einige wie pop , append oder extend mit left . Die deque Datenstruktur sollte einer Liste vorgezogen werden, wenn Elemente an beiden Enden häufig eingefügt und gelöscht werden müssen, da dies zu einer konstanten Zeit O (1) möglich ist.

Basic Deque mit

Die wichtigsten Methoden, die für diese Klasse nützlich sind, sind popleft und 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])

Begrenzung der Deque-Größe

Verwenden Sie den Parameter maxlen , während Sie eine Deque erstellen, um die Größe der Deque zu begrenzen:

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)

Verfügbare Methoden in deque

Leeren deque erstellen:

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

Erstellen von Deque mit einigen Elementen:

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

Element zu deque hinzufügen:

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

Element links von deque hinzufügen:

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

Liste der Elemente zu deque hinzufügen:

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

Hinzufügen einer Liste von Elementen von links:

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

Mit dem Element .pop() wird ein Element auf der rechten Seite entfernt:

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

Verwenden .popleft() Elements .popleft() zum Entfernen eines Elements von der linken Seite:

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

Element nach seinem Wert entfernen:

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

Kehren Sie die Reihenfolge der Elemente in deque um:

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

Breite erste Suche

Der Deque ist die einzige Python-Datenstruktur mit schnellen Warteschlangenoperationen . (Hinweis queue.Queue ist normalerweise nicht geeignet, da sie für die Kommunikation zwischen Threads queue.Queue ist.) Ein grundlegender Anwendungsfall einer Queue ist die erste Suche in der Breite .

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

Angenommen, wir haben eine einfache gerichtete Grafik:

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

Wir können nun die Entfernungen von einer Startposition aus finden:

>>> 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow