Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Maximierung der SortierEffizienz | Leistungssteigerung mit Integrierten Werkzeugen
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
Maximierung der SortierEffizienz

Eingebaute Sortierung

Wann immer Sie eine Liste sortieren müssen, ist es fast immer am besten, eines der beiden hochoptimierten Sortierwerkzeuge zu verwenden: die Funktion sorted() oder die Methode sort(). Beide sind in C implementiert und verwenden Timsort, einen hybriden Algorithmus, der Mergesort und Insertionsort für Effizienz kombiniert.

sorted() ist ideal für allgemeine Sortierungen, wenn Sie ein beliebiges Iterable sortieren müssen, ohne die ursprünglichen Daten zu verändern. Andererseits ist sort() am besten für Listen geeignet, wenn eine Änderung vor Ort akzeptabel ist.

Beide Methoden sind effizient, aber list.sort() kann nur geringfügig schneller für sehr große Listen sein, da es die Erstellung einer neuen Liste vermeidet. Verwenden Sie jedoch sorted(), wenn Sie die ursprüngliche Liste intakt halten müssen.

Teilweise Sortierung mit heapq

Für Fälle, in denen Sie nur die kleinsten oder größten Elemente eines Datensatzes benötigen, ist das Sortieren der gesamten Daten unnötig. Das Modul heapq bietet effiziente Methoden wie heapq.nsmallest() und heapq.nlargest(), um diese Elemente zu extrahieren, ohne das gesamte Iterable vollständig zu sortieren, was es schneller und speichereffizienter macht.

Vergleichen wir die Leistung der Funktion sorted() und der Funktion heapq.nsmallest() für das Abrufen der 10 kleinsten Zahlen aus einer Liste:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(10, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:10] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Wie Sie sehen können, ist in unserem speziellen Beispiel heapq.nsmallest() ungefähr 10 Mal schneller.

Wenn jedoch die Anzahl der größten oder kleinsten Elemente (n), die Sie abrufen möchten, nahe an der Gesamtanzahl der Elemente in der Liste liegt, ist heapq oft langsamer als die Verwendung der sorted()-Funktion oder der .sort()-Methode.

Zum Beispiel, lassen Sie uns jetzt 100000 kleinste Elemente der Liste abrufen:

1234567891011121314151617181920212223
import heapq import os decorators = os.system('wget https://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 import random # Generate a large list of random integers numbers = [random.randint(1, 1000000) for _ in range(1000000)] @timeit_decorator(number=10) def partial_sort_heapq(): return heapq.nsmallest(100000, numbers) @timeit_decorator(number=10) def partial_sort_sorted(): return sorted(numbers)[:100000] # Compare performance heapq_result = partial_sort_heapq() sorted_result = partial_sort_sorted() # Ensure both methods give the same result print(heapq_result == sorted_result)
copy

Die sorted()-Funktion übertrifft in diesem Fall eindeutig heapq.

1. Sie müssen eine gesamte Liste von Zahlen sortieren, während die ursprüngliche Liste intakt bleibt. Welche Sortierfunktion/-methode sollten Sie verwenden?

2. Sie überprüfen einen Datensatz von 500.000 Verkaufsdatensätzen. Um die 20 umsatzstärksten Transaktionen zu identifizieren, welcher Ansatz ist wahrscheinlich schneller und speichereffizienter?

Sie müssen eine gesamte Liste von Zahlen sortieren, **während die ursprüngliche Liste intakt bleibt**. Welche Sortierfunktion/-methode sollten Sie verwenden?

Sie müssen eine gesamte Liste von Zahlen sortieren, während die ursprüngliche Liste intakt bleibt. Welche Sortierfunktion/-methode sollten Sie verwenden?

Wählen Sie die richtige Antwort aus

Sie überprüfen einen Datensatz von **500.000 Verkaufsdatensätzen**. Um die **20 umsatzstärksten Transaktionen** zu identifizieren, welcher Ansatz ist wahrscheinlich schneller und speichereffizienter?

Sie überprüfen einen Datensatz von 500.000 Verkaufsdatensätzen. Um die 20 umsatzstärksten Transaktionen zu identifizieren, welcher Ansatz ist wahrscheinlich schneller und speichereffizienter?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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