Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Verwendung des Collections-Moduls | Effiziente Nutzung von Datenstrukturen
Optimierungstechniken in Python

bookVerwendung des Collections-Moduls

Obwohl eingebaute Datentypen und NumPy-Arrays die meisten gängigen Aufgaben abdecken, bietet das Modul collections spezialisierte Datenstrukturen für bestimmte Anwendungsfälle. Unter diesen zeichnet sich deque (doppelt verkettete Warteschlange) durch erhebliche Leistungs­vorteile in bestimmten Szenarien aus.

Im Gegensatz zu Listen, bei denen beim Einfügen oder Entfernen am Anfang Elemente verschoben werden müssen, ermöglicht ein deque effiziente Operationen an beiden Enden. Wenn also häufig Elemente an einem der beiden Enden einer Sammlung hinzugefügt oder entfernt werden müssen, ist ein deque die bessere Wahl.

Im Folgenden wird die Leistung von list und deque in einem praktischen Szenario verglichen:

123456789101112131415161718192021222324252627282930
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
copy

In diesem Beispiel wurden eine list und ein deque erstellt, die jeweils 1.000.000 Zahlen von 1 bis einschließlich 1.000.000 enthalten. Wie gezeigt, ist das Einfügen und Entfernen von Elementen am Anfang bei einem deque deutlich schneller als bei einer list und bleibt unabhängig von der Größe effizient.

Bezüglich des Einfügens oder Entfernens von Elementen am Anfang können sowohl list als auch deque diese Aufgaben effizient ausführen. Daher bietet die Verwendung eines deque ausschließlich zu diesem Zweck häufig keinen signifikanten Vorteil.

1234567891011121314151617181920212223
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
copy

Die Leistungswerte sind tatsächlich für beide Datenstrukturen ähnlich. Das Anhängen an eine list ist jedoch etwas langsamer als das Anhängen an eine deque, da Listen, die als dynamische Arrays implementiert sind, gelegentlich vergrößert werden müssen, indem ein größerer Speicherblock zugewiesen und die Elemente kopiert werden. Im Gegensatz dazu vermeidet die blockbasierte Struktur von deque das Vergrößern, wodurch das Anhängen durchgehend schneller erfolgt. Dieser Unterschied wird jedoch erst bei relativ großen Listen deutlich.

question mark

In welcher der folgenden Situationen ist eine deque die bessere Wahl als eine list?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 4

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 7.69

bookVerwendung des Collections-Moduls

Swipe um das Menü anzuzeigen

Obwohl eingebaute Datentypen und NumPy-Arrays die meisten gängigen Aufgaben abdecken, bietet das Modul collections spezialisierte Datenstrukturen für bestimmte Anwendungsfälle. Unter diesen zeichnet sich deque (doppelt verkettete Warteschlange) durch erhebliche Leistungs­vorteile in bestimmten Szenarien aus.

Im Gegensatz zu Listen, bei denen beim Einfügen oder Entfernen am Anfang Elemente verschoben werden müssen, ermöglicht ein deque effiziente Operationen an beiden Enden. Wenn also häufig Elemente an einem der beiden Enden einer Sammlung hinzugefügt oder entfernt werden müssen, ist ein deque die bessere Wahl.

Im Folgenden wird die Leistung von list und deque in einem praktischen Szenario verglichen:

123456789101112131415161718192021222324252627282930
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def list_append_left(): # Insert -1 at the beginning numbers_list.insert(0, -1) @timeit_decorator(number=1000) def deque_append_left(): numbers_deque.appendleft(-1) @timeit_decorator(number=1000) def list_pop_left(): # Remove the element at index 0 (first element) numbers_list.pop(0) @timeit_decorator(number=1000) def deque_pop_left(): numbers_deque.popleft() list_append_left() deque_append_left() list_pop_left() deque_pop_left()
copy

In diesem Beispiel wurden eine list und ein deque erstellt, die jeweils 1.000.000 Zahlen von 1 bis einschließlich 1.000.000 enthalten. Wie gezeigt, ist das Einfügen und Entfernen von Elementen am Anfang bei einem deque deutlich schneller als bei einer list und bleibt unabhängig von der Größe effizient.

Bezüglich des Einfügens oder Entfernens von Elementen am Anfang können sowohl list als auch deque diese Aufgaben effizient ausführen. Daher bietet die Verwendung eines deque ausschließlich zu diesem Zweck häufig keinen signifikanten Vorteil.

1234567891011121314151617181920212223
import os os.system('wget https://staging-content-media-cdn.codefinity.com/courses/8d21890f-d960-4129-bc88-096e24211d53/section_1/chapter_3/decorators.py 2>/dev/null') from decorators import timeit_decorator from collections import deque numbers_list = list(range(1, 10000001)) numbers_deque = deque(numbers_list) @timeit_decorator(number=1000) def append_right(data_structure): data_structure.append(-1) @timeit_decorator(number=1000) def pop_right(data_structure): data_structure.pop() print('List performance:') append_right(numbers_list) pop_right(numbers_list) print('Dequeue performance:') append_right(numbers_deque) pop_right(numbers_deque)
copy

Die Leistungswerte sind tatsächlich für beide Datenstrukturen ähnlich. Das Anhängen an eine list ist jedoch etwas langsamer als das Anhängen an eine deque, da Listen, die als dynamische Arrays implementiert sind, gelegentlich vergrößert werden müssen, indem ein größerer Speicherblock zugewiesen und die Elemente kopiert werden. Im Gegensatz dazu vermeidet die blockbasierte Struktur von deque das Vergrößern, wodurch das Anhängen durchgehend schneller erfolgt. Dieser Unterschied wird jedoch erst bei relativ großen Listen deutlich.

question mark

In welcher der folgenden Situationen ist eine deque die bessere Wahl als eine list?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 4
some-alt