- 1 1. Einführung
- 2 2. Wie man Listen sortiert
- 3 3. Anpassen der Sortierung
- 4 4. Überlegungen zur Sortierung
- 5 5. TimSort: Pythons Standard-Sortieralgorithmus
- 6 6. Leistungsvergleich von sort() und sorted()
- 7 7. Techniken zum Sortieren von Listen
- 8 8. Häufige Fehler und LösungenTypeError: ‚<‚ not supported between instances
- 9 9. Häufig gestellte Fragen (FAQ)
1. Einführung
Python wird weithin als einfache und intuitive Programmiersprache verwendet. Unter seinen Funktionen ist „Listen sortieren“ eine der grundlegenden und häufig verwendeten Operationen. Dieser Artikel gibt eine detaillierte Erklärung darüber, wie man Listen in Python sortiert, sowie Anpassungsmethoden und Vorsichtsmaßnahmen.
Durch das Lesen dieses Artikels werden sogar Anfänger verstehen, wie man Listen effizient sortiert und es in realen Programmen anwenden kann.
2. Wie man Listen sortiert
Python hat zwei Haupt-Sortierverfahren. Lassen Sie uns die Eigenschaften und die Verwendung jedes betrachten.
2.1 Sortieren mit der sort()
Methode
sort()
Methode ist eine Methode, die auf Listenobjekten bereitgestellt wird, und sieordnet die ursprüngliche Liste direkt um. Standardmäßig sortiert sie inaufsteigender Reihenfolge(von klein nach groß), aber durch Angabe von reverse=True
sortiert sie in absteigender Reihenfolge (von groß nach klein).
Grundlegende Verwendung
numbers = [3, 1, 4, 1, 5]
numbers.sort()
print(numbers) # Ausgabe: [1, 1, 3, 4, 5]
Sortieren in absteigender Reihenfolge
numbers = [3, 1, 4, 1, 5]
numbers.sort(reverse=True)
print(numbers) # Ausgabe: [5, 4, 3, 1, 1]
2.2 Sortieren mit der sorted()
Funktion
sorted()
Funktion gibt eineneue sortierte Liste zurück, ohne die ursprüngliche Liste zu modifizieren. Sie verwendet standardmäßig aufsteigende Reihenfolge, und Sie können absteigende Reihenfolge durch Verwendung von reverse=True
erhalten.
Grundlegende Verwendung
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # Ausgabe: [1, 1, 3, 4, 5]
print(numbers) # Ausgabe: [3, 1, 4, 1, 5] Die ursprüngliche Liste bleibt unverändert
In absteigender Reihenfolge sortieren
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # Ausgabe: [5, 4, 3, 1, 1]

3. Anpassen der Sortierung
In Python, mit dem key
Argument ist eine benutzerdefinierte Sortierung möglich. Es ist nützlich, wenn Sie eine Liste nach Ihren eigenen Regeln neu ordnen möchten.
3.1 Sortieren mit dem key
Argument
Sortieren nach String-Länge
Wenn die Elemente in einer Liste Strings sind, wird das Sortieren basierend auf der String-Länge durch Angabe der len
Funktion in key
erfolgen.
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words) # ['date', 'apple', 'banana', 'cherry']
3.2 Sortieren einer Liste von Wörterbüchern
Beim Sortieren einer Liste, die Wörterbücher enthält, ermöglicht die Verwendung der lambda
Funktion mit dem key
Argument das Sortieren basierend auf einem spezifischen Schlüssel.
Sortieren nach numerischen Werten in Wörterbüchern
fruits = [
{'name': 'apple', 'price': 100},
{'name': 'banana', 'price': 50},
{'name': 'cherry', 'price': 150}
]
fruits.sort(key=lambda x: x['price'])
print(fruits)
# [{'name': 'banana', 'price': 50}, {'name': 'apple', 'price': 100}, {'name': 'cherry', 'price': 150}]
Sortieren mit mehreren Kriterien
Wenn Sie bei gleichen Preisen nach Namen sortieren möchten, geben Sie ein Tupel in key
an.
fruits.sort(key=lambda x: (x['price'], x['name']))
print(fruits)
# [{'name': 'banana', 'price': 50}, {'name': 'apple', 'price': 100}, {'name': 'cherry', 'price': 150}]
4. Überlegungen zur Sortierung
4.1 Wenn unterschiedliche Datentypen gemischt werden
Wenn eine Liste sowohl Zahlen als auch Strings enthält, tritt TypeError
auf. Seien Sie vorsichtig.
mixed_list = [3, 'apple', 2]
mixed_list.sort()
# Ausgabe: TypeError: '<' not supported between instances of 'str' and 'int'
Lösung
Entweder die Datentypen vereinheitlichen oder eine benutzerdefinierte Sortierung verwenden.
mixed_list = [3, 'apple', 2]
mixed_list = [str(x) for x in mixed_list]
mixed_list.sort()
print(mixed_list) # ['2', '3', 'apple']
4.2 Stabilität der Sortierung
Die Sortierung in Python ist eine „stabile Sortierung“. Wenn doppelte Werte vorhanden sind, wird die ursprüngliche Reihenfolge der Liste erhalten.
data = [(1, 'a'), (2, 'b'), (1, 'c')]
data.sort(key=lambda x: x[0])
print(data) # [(1, 'a'), (1, 'c'), (2, 'b')]

5. TimSort: Pythons Standard-Sortieralgorithmus
In Python wird derTimSort (Tim sort)-Algorithmus zum Sortieren von Listen verwendet. Es handelt sich um einen stabilen Sortieralgorithmus, dermerge sortundinsertion sortkombiniert.
Eigenschaften von TimSort
- Stabile Sortierung: Die Reihenfolge von Elementen mit gleichen Werten wird erhalten.
- Schnelle Verarbeitung: Es führt effizient bei realen Datensätzen aus und ist in durchschnittlichen Fällen schnell.
- Stark bei teilweise sortierten Daten: Die Leistung verbessert sich besonders bei Daten, die bereits teilweise geordnet sind.
6. Leistungsvergleich von sort() und sorted()
Weil die sort()
-Methode und sorted()
-Funktion in Python operationelle Unterschiede haben, lassen Sie uns auch dieLeistungverstehen.
Grundlegende Unterschiede
Merkmal | sort() | sorted() |
---|---|---|
Ziel | Ändert die ursprüngliche Liste | Erstellt eine neue Liste |
Rückgabewert | None (gibt None zurück) | Neue sortierte Liste |
Anwendungsfall | Wenn es in Ordnung ist, die Liste zu ändern | Wenn Sie die ursprüngliche Liste beibehalten möchten |
Leistungsvergleich
sort()
istetwas schnellerals sorted()
. Weil sort()
die Liste vor Ort sortiert, gibt es keinezusätzlichen Speicherkosten.
Benchmark-Beispiel
import time
numbers = [3, 1, 4, 1, 5] * 100000
# Timing sort()
start = time.time()
numbers.sort()
end = time.time()
print("sort() Verarbeitungszeit:", end - start)
# Timing sorted()
numbers = [3, 1, 4, 1, 5] * 100000
start = time.time()
sorted_numbers = sorted(numbers)
end = time.time()
print("sorted() Verarbeitungszeit:", end - start)
Daher ist es wichtig, sort()
und sorted()
je nach Anwendungsfall angemessen zu wählen.

7. Techniken zum Sortieren von Listen
Einfache Methode zum Sortieren in umgekehrter Reihenfolge
There is also a way to sort the list in reverse order without using sort()
and sorted()
.
numbers = [1, 2, 3, 4, 5]
reverse_numbers = numbers[::-1]
print(reverse_numbers) # Ausgabe: [5, 4, 3, 2, 1]
8. Häufige Fehler und LösungenTypeError: ‚<‚ not supported between instances
- Ursache: Wenn die Liste unterschiedliche Datentypen enthält (z. B. Zahlen und Strings).
- Lösung: Die Datentypen standardisieren oder sie explizit mit einer benutzerdefinierten Sortierung behandeln.
Beispiel
# Code, die einen Fehler auslöst
mixed_list = [3, 'apple', 2]
mixed_list.sort() # TypeError
# Lösung
mixed_list = [str(x) for x in mixed_list]
mixed_list.sort()
print(mixed_list) # ['2', '3', 'apple']
9. Häufig gestellte Fragen (FAQ)
Q1: Was ist der Unterschied zwischen sort()
und sorted()
?
A:
sort()
Methode: Sie ordnet die Inhalte der Liste direkt um. Die ursprüngliche Liste wird geändert.sorted()
Funktion: Sie gibt eine neue sortierte Liste zurück. Die ursprüngliche Liste wird nicht geändert.
Beispiel
numbers = [3, 1, 4, 1, 5]
# Mit sort() sortieren
numbers.sort()
print(numbers) # [1, 1, 3, 4, 5] - die ursprüngliche Liste wird geändert
# Mit sorted() sortieren
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # [1, 1, 3, 4, 5]
print(numbers) # [3, 1, 4, 1, 5] - die ursprüngliche Liste wird nicht geändert
Q2: Wie kann ich absteigend sortieren?
A:Du kannst absteigend sortieren, indem du reverse=True
für die sort()
Methode oder die sorted()
Funktion angibst.Beispiel
numbers = [3, 1, 4, 1, 5]
# Absteigend mit sort() sortieren
numbers.sort(reverse=True)
print(numbers) # [5, 4, 3, 1, 1]
# Absteigend mit sorted() sortieren
numbers = [3, 1, 4, 1, 5]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers) # [5, 4, 3, 1, 1]
Q3: Was ist eine benutzerdefinierte Sortierung? Wie verwendet man sie?
A:Eine benutzerdefinierte Sortierung ist eine Möglichkeit, eigene Sortierkriterien zu definieren. Du gibst eine Funktion oder eine lambda
-Ausdruck mit dem key
-Argument an. Zum Beispiel kannst du nach Stringlänge oder einem spezifischen Schlüssel in einem Dictionary sortieren.Beispiel: Nach Stringlänge sortieren
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words) # ['date', 'apple', 'banana', 'cherry']
Q4: Welchen Sortieralgorithmus verwendet Python?
A:Python verwendet einen Sortieralgorithmus namensTimSort. Es handelt sich um einen Algorithmus, derMerge SortundInsertion Sortkombiniert, und er ist effizient für teilweise sortierte Daten.
Q5: Gibt es Wege, langsame Sortierungen zu handhaben?
A:Wenn die Liste eine sehr große Anzahl von Elementen hat oder du komplexe benutzerdefinierte Sortierungen durchführst, kann die Verarbeitungsgeschwindigkeit langsam werden. Du kannst sie mit den folgenden Methoden verbessern.
- Sortierung auf das Minimum notwendig beschränkenVermeide unnötige Sortierungen und versuche, nur einen Teil der Daten zu sortieren.
- Das
heapq
-Modul verwendenMitheapq
aus der Python-Standardbibliothek kannst du effizient Teilsortierungen durchführen (z. B. die Top-N-Elemente abrufen).
Beispiel: Die Top 3 Zahlen abrufen
import heapq
numbers = [5, 1, 8, 3, 2, 9]
top3 = heapq.nlargest(3, numbers)
print(top3) # [9, 8, 5]