oder einfach dequeist eine ungewöhnliche Artwork der Sammlung. Wenn wir im Web suchen, finden wir viele Informationen zu Hear, Wörterbüchern und Tupeln, aber wenig zu Deque.

Deque (man kann es auch aussprechen „Deck“ ) ist eine interessante und nützliche Sammlungsart in Python. Was es von anderen Objekten unterscheidet, ist, dass es nur die gewünschte Anzahl an Elementen enthält oder weniger, niemals mehr.

Eine doppelendige Warteschlange fasst nur die von Ihnen festgelegte Anzahl an Artikeln. Nie mehr.

Es funktioniert additionally genauso wie ein Deckmit dem FIFO-System (First In, First Out). Sobald das Deck voll ist und Sie ein weiteres Factor hinzufügen, wird das erste Factor auf der linken Seite gelöscht und das neue auf der rechten Seite hinzugefügt.

Sehen wir uns einige grundlegende Beispiele an, um diese Sammlung zu verstehen. Importieren Sie es zunächst aus Sammlungen: from collections import deque.

Erstellen einer Deque

Als nächstes erstellen wir ein einfaches Deck und fügen ihm eine maximale Länge von 3 Artikeln hinzu.

# Create a brand new deque with 3 (or much less) parts
my_deck = deque(maxlen = 3)

# Including one component
my_deck.append(1)
my_deck.append(2)
my_deck.append(3)

# View
my_deck
# deque((1, 2, 3))

Hübsch. Wenn unser Deck voll ist, beobachten Sie, was passiert, wenn ich versuche, ihm einen weiteren Wert hinzuzufügen. Das erste Factor auf der linken Seite (1) wird gelöscht und öffnet Platz für das neue Factor, das rechts angehängt wird (additional).

# It drops the primary component and provides the brand new one on the finish.
my_deck.append('additional')
deque((2, 3, 'additional'))

Es funktioniert genauso wie ein Deck mit dem FIFO-System (First In, First Out).

Elemente hyperlinks anhängen

Denken Sie daran, dass die Sammlung den Namen hat doppelendige Warteschlange ; Sie können additionally auch hyperlinks Elemente anhängen oder erweitern. In diesem Fall wird das Factor natürlich ganz rechts abgelegt.

# Append to left
my_deck.appendleft('left')
# (OUT): deque(('left', 2, 3))

# Prolong to left
my_deck.extendleft(('d', 'd'))
#(OUT): deque(('d', 'd', 'left'))

Elemente drehen

Sie können die Elemente auch drehen und sie um eine (oder mehrere) Positionen nach rechts oder hyperlinks verschieben.

# Create a brand new deque with 3 (or much less) parts
my_deck = deque(maxlen = 3)

# Including one component
my_deck.lengthen((1,2,3)) # deque((1, 2, 3))
# Rotating the weather by one place to the proper
my_deck.rotate() # deque((3, 1, 2))

# Rotate to the left
my_deck.rotate(-1) # deque((1, 2, 3))

Neben der Drehung ist es einfach, das Mähwerk komplett umzudrehen.

# New deck
my_deck.lengthen((1, 2, 3)) 
#(OUT): deque((1, 2, 3))

# Reverse deck
my_deck.reverse() 
# (OUT): deque((3, 2, 1))

Elemente entfernen

In einem Deck können Sie ein Factor von hyperlinks, rechts oder nach Namen entfernen.

# New deck
my_deck = deque(maxlen = 3)
my_deck.lengthen((1, 2, 3)) 
# (OUT): deque((1, 2, 3))

# Take away merchandise from the left
my_deck.popleft() 
# (OUT): deque((2, 3))

#---

# New deck
my_deck = deque(maxlen = 3)
my_deck.lengthen((1, 2, 3)) 
# (OUT): deque((1, 2, 3))

# Take away merchandise from the proper
my_deck.pop() 
# (OUT): deque((1, 2))

#---

# New deck
my_deck = deque(maxlen = 3)
my_deck.lengthen((1, 'a', 3)) 
# (OUT): deque((1, 'a', 3))

# Take away merchandise by identify
my_deck.take away('a') 
# (OUT): deque((1, 3))

Sie können auch alle Gegenstände entfernen und Ihr Deck leeren.

my_deck.clear() 
#(OUT): deque(())

Anwendungen

1. Der „Aktuelle Suchverlauf“ (Speicherverwaltung)

Während Hear ins Unendliche wachsen, deque hat ein maxlen Parameter. Dies ist perfekt für Funktionen wie „Zuletzt angesehen“ oder „Letzter Suchverlauf“, bei denen Sie nur den letzten behalten möchten N Elemente, ohne die alten manuell zu löschen.

# Hold solely the final 3 person searches
search_history = deque(maxlen=3)

search_history.append("Python tutorials")
search_history.append("Machine Studying")
search_history.append("Knowledge Science")
search_history.append("Deep Studying") # "Python tutorials" is robotically eliminated

print(record(search_history))
# Output: ('Machine Studying', 'Knowledge Science', 'Deep Studying')

2. Stay-Datenstream und gleitende Durchschnitte

In der Datenwissenschaft oder im IoT müssen Sie häufig einen gleitenden Durchschnitt eines Stroms berechnen (z. B. Temperatursensoren oder Aktienkurse). Mit a deque ermöglicht Ihnen die effiziente Verwaltung eines „gleitenden Datenfensters“.

def moving_average(stream, window_size=5):
    window = deque(maxlen=window_size)
    for val in stream:
        window.append(val)
        if len(window) == window_size:
            yield sum(window) / window_size

# Utilization: Calculating common of a sensor studying stream
data_stream = (20, 21, 20, 22, 23, 25, 24)
print(record(moving_average(data_stream, window_size=3)))

3. Multithread-Aufgabenwarteschlangen (Thread-Sicherheit)

Einer der „versteckten“ Vorteile von deque in CPython ist das so .append() Und .popleft() Sind Thread-sicher. Dies macht es zu einer ausgezeichneten Wahl für ein einfaches Producer-Client-Muster, bei dem ein Thread Aufgaben hinzufügt und ein anderer sie ausführt.

import threading
from collections import deque

task_queue = deque()

def producer():
    for i in vary(5):
        task_queue.append(f"Activity {i}") # Thread-safe append

def client():
    whereas True:
        attempt:
            activity = task_queue.popleft() # Thread-safe pop
            print(f"Processing {activity}")
        besides IndexError:
            break

Sehen wir uns das in Aktion an.

# Generate Duties
producer()
task_queue
# (OUT) deque(('Activity 0', 'Activity 1', 'Activity 2', 'Activity 3', 'Activity 4'))

# Eat Duties
client()
# (OUT)
# Processing Activity 0
# Processing Activity 1
# Processing Activity 2
# Processing Activity 3
# Processing Activity 4

# Test Queue
task_queue
# (OUT) deque(())

Bevor Sie gehen

Nun kennen Sie eine andere Artwork von Python-Sammlung. Sie können Ihrer Kreativität freien Lauf lassen und neue Wege finden, Ihr Programm oder Skript zu erstellen.
Die Zusammenfassung dieses Artikels ist einfach:

  • Syntax: deque(maxlen = n) Wo Nist die Anzahl der Elemente, die in Ihrem Deck gespeichert werden sollen.
  • Standardmäßig wird das erste Factor auf der linken Seite gelöscht, wenn Sie einem vollständigen Deck ein neues hinzufügen.
  • Die Sammlung deque akzeptiert alle Arten von Objekten, z. B. int, float, string, dataframe usw.
  • Es gibt viele Methoden, es zu manipulieren, z reverse , clear , rotate , appendleft.

Wenn dieser Inhalt für Sie interessant ist, lesen Sie mehr über meine Arbeit auf meiner Web site.

https://gustavorsantos.me

Referenzen

Sammlungen – Containerdatentypen

Deque in Python – GeeksforGeeks

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert