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
course content

Kursinhalt

Optimierungstechniken in Python

Optimierungstechniken in Python

1. Verstehen und Messen der Leistung
2. Effiziente Nutzung von Datenstrukturen
3. Leistungssteigerung mit Integrierten Werkzeugen

book
Verwendung des Collections-Moduls

Obwohl eingebaute Datentypen und NumPy-Arrays die meisten gängigen Aufgaben bewältigen, bietet das collections-Modul spezialisierte Datenstrukturen, die für spezifische Anwendungsfälle entwickelt wurden. Unter diesen sticht deque (doppelt verkettete Warteschlange) aufgrund seiner erheblichen Leistungsverbesserungen in bestimmten Szenarien hervor.

Im Gegensatz zu Listen, die Elementverschiebungen erfordern, wenn Elemente am Anfang eingefügt oder entfernt werden, ermöglicht ein deque effiziente Operationen an beiden Enden. Daher ist ein deque die bessere Wahl, wenn Sie häufig Elemente an einem der Enden einer Sammlung hinzufügen oder entfernen müssen.

Nun, lassen Sie uns die Leistung von list und deque in einem praktischen Szenario vergleichen:

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 haben wir eine list und eine deque erstellt, die jeweils 1000000 Zahlen von 1 bis 1000000 enthalten. Wie gezeigt, ist das Einfügen und Entfernen von Elementen am Anfang in einer deque viel schneller als in einer list und bleibt unabhängig von der Größe effizient.

Wenn es darum geht, Elemente am Anfang einzufügen oder zu entfernen, können sowohl list als auch deque diese Aufgaben effizient bewältigen. Daher bietet die Verwendung einer deque ausschließlich zu diesem Zweck oft 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 Leistungsresultate 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 durch Zuweisung eines größeren Speicherblocks und Kopieren von Elementen vergrößert werden müssen. Im Gegensatz dazu vermeidet die blockbasierte Struktur von deque das Vergrößern, was das Anhängen durchgehend schneller macht. Dieser Unterschied wird jedoch nur bei relativ großen Listen bemerkbar.

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

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

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 4
We're sorry to hear that something went wrong. What happened?
some-alt