Sök…


Syntax

  • dq = deque () # Skapar ett tomt vattenfönster
  • dq = deque (iterable) # Skapar en deque med vissa element
  • dq.append (object) # Lägger till objekt till höger om tullen
  • dq.appendleft (object) # Lägger till objekt till vänster om turen
  • dq.pop () -> objekt # Tar bort och returnerar det mest rätt objektet
  • dq.popleft () -> objekt # Tar bort och returnerar det mest vänstra objektet
  • dq.extend (iterable) # Lägger till några element till höger om turen
  • dq.extendleft (iterable) # Lägger till några element till vänster om turen

parametrar

Parameter detaljer
iterable Skapar täcken med initiala element som kopierats från en annan iterable.
maxlen Begränsar hur stor täcken kan vara, och skjuta ut gamla element som nya läggs till.

Anmärkningar

Den här klassen är användbar när du behöver ett objekt som liknar en lista som tillåter snabba tilläggs- och pop-operationer från endera sidan ( deque står för ” dubbelkön ”).

Metoderna som tillhandahålls är verkligen mycket lika, förutom att vissa som pop , append eller extend kan vara fixerade med left . deque bör föredras framför en lista om man ofta behöver infoga och radera element i båda ändarna eftersom den tillåter det i konstant tid O (1).

Grundläggande torkning med

De viktigaste metoderna som är användbara med den här klassen är popleft och 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])

begränsa täckningsstorleken

Använd maxlen parametern när du skapar en täck för att begränsa storleken på tecken:

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)

Tillgängliga metoder i färg

Skapa tomt skiva:

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

Skapa skiva med några element:

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

Lägga till element i torkning:

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

Lägga till elementets vänstra sida av täcken:

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

Lägger till en lista med element till torkning:

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

Lägga till en lista över element till från vänster:

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

Att använda .pop() -elementet kommer naturligtvis att ta bort ett objekt från höger sida:

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

Använd .popleft() att ta bort ett objekt från vänster sida:

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

Ta bort elementet med dess värde:

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

Omvänd ordning på elementen i täck:

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

Utöka första sökningen

Deque är den enda Python-datastrukturen med snabba köoperationer . (Notera queue.Queue är normalt inte lämpligt eftersom det är avsett för kommunikation mellan trådar.) Ett grundläggande användningsfall för en kö är breddens första sökning .

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

Säg att vi har en enkel riktad graf:

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

Vi kan nu hitta avstånden från någon utgångsposition:

>>> 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow