Python-Listen sortieren: sort() vs sorted() & benutzerdefinierte Methoden

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')]
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

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

  1. Stabile Sortierung: Die Reihenfolge von Elementen mit gleichen Werten wird erhalten.
  2. Schnelle Verarbeitung: Es führt effizient bei realen Datensätzen aus und ist in durchschnittlichen Fällen schnell.
  3. 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

Merkmalsort()sorted()
ZielÄndert die ursprüngliche ListeErstellt eine neue Liste
RückgabewertNone (gibt None zurück)Neue sortierte Liste
AnwendungsfallWenn es in Ordnung ist, die Liste zu ändernWenn 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.

  1. Sortierung auf das Minimum notwendig beschränkenVermeide unnötige Sortierungen und versuche, nur einen Teil der Daten zu sortieren.
  2. Das heapq-Modul verwendenMit heapq 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]