Unterschied zwischen sort() und sorted() in Python
Sortieren ist ein Thema, das in der Welt der Informatik sehr wichtig ist. Es stehen viele Algorithmen zum Sortieren von Datenarrays zur Verfügung, z. B. Merge-Sort, Quick-Sort, Bubble-Sort, Selection-Sort, Insert-Sort usw. Alle diese Algorithmen haben unterschiedliche zeitliche und räumliche Komplexität, aber Merge und Quick werden im Allgemeinen als die besten angesehen. Da das Sortieren ein sehr verbreiteter Vorgang ist, enthalten Programmiersprachen eingebaute Funktionen zum Sortieren von Daten. Und Python ist einer von ihnen.
Aber es gibt zwei Funktionen zum Sortieren in Python, nämlich sortieren
und sortiert
. In diesem Artikel lernen wir den Unterschied zwischen diesen beiden Sortierfunktionen kennen.
Die Funktion sort()
in Python
Die Funktion sortieren
in Python sortiert die Liste an Ort und Stelle, indem sie die Werte an ihren Indizes vertauscht. Wenn wir die Funktion sortieren
über eine Liste aufrufen, wird keine neue Liste zurückgegeben; stattdessen wird dieselbe Liste sortiert. Mit der Funktion sort()
können Listen sortiert werden.
Ein Beispiel finden Sie im folgenden Code.
myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort()
print(myList)
Ausgabe:
[1, 5, 2, 10, 33, 3, 9]
[1, 2, 3, 5, 9, 10, 33]
Wie wir sehen, wurde dieselbe Liste sortiert, als wir die Funktion sort
darüber aufgerufen haben.
Wenn wir die Liste in umgekehrter Reihenfolge sortieren möchten, können wir dies auch tun, indem wir das Argument reverse
auf True
setzen.
Siehe den folgenden Code für dasselbe.
myList = [1, 5, 2, 10, 33, 3, 9]
print(myList)
myList.sort(reverse=True)
print(myList)
Ausgabe:
[1, 5, 2, 10, 33, 3, 9]
[33, 10, 9, 5, 3, 2, 1]
Die Funktion sort
hat noch einen weiteren Parameter, nämlich key
, mit dem festgelegt werden kann, welcher Wert für die Sortierung berücksichtigt werden soll. Wenn wir zum Beispiel eine Liste von Paaren haben und die Paare nach dem zweiten Wert sortieren möchten, können wir dies mit dem Parameter key
tun.
Ein Beispiel finden Sie im folgenden Code.
def secondElement(element):
return element[1]
data = [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
print("Before sorting:", data)
data.sort(key=secondElement)
print("After sorting:", data)
Ausgabe:
Before sorting: [(1, 2), (3, 4), (5, 3), (6, 6), (3, 0), (10, 1)]
After sorting: [(3, 0), (10, 1), (1, 2), (5, 3), (3, 4), (6, 6)]
Wie wir sehen können, ist die Liste nach der zweiten Zahl innerhalb der Paare sortiert.
Wir können auch eine Liste von Wörterbüchern mit dem gleichen Ansatz sortieren. Siehe den folgenden Code für dasselbe.
def byName(entry):
return entry["name"]
def byAge(entry):
return entry["age"]
def byRank(entry):
return entry["rank"]
data = [
{
"name": "Vaibhav",
"age": 18,
"rank": 1,
},
{
"name": "Steve",
"age": 24,
"rank": 5,
},
{
"name": "Olive",
"age": 12,
"rank": 2,
},
{
"name": "Allison",
"age": 17,
"rank": 4,
},
]
print("Original Data")
print(data)
print("Sorted by Name")
data.sort(key=byName)
print(data)
print("Sorted by Age")
data.sort(key=byAge)
print(data)
print("Sorted by Rank")
data.sort(key=byRank)
print(data)
Ausgabe:
Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Wie wir sehen, sind die Einträge in der Liste der Wörterbücher nach dem von uns definierten Schlüssel sortiert.
Die Funktion sorted()
in Python
Wie die Funktion sort
wird auch sorted
zum Sortieren von Listen verwendet. Die Funktion sorted
gibt jedoch eine neue Liste zurück, anstatt dieselbe Liste an Ort und Stelle zu sortieren. Dies ist der Hauptunterschied zwischen den beiden Funktionen. Lassen Sie uns dies an einem Beispiel verstehen.
myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList)
print("After called sorted():", myList)
print("New list:", newList)
Ausgabe:
Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [1, 2, 3, 5, 9, 10, 33]
Wie wir sehen, bleibt die Liste, die wir an die Funktion sorted
übergeben haben, gleich, und es wurde eine neue Liste zurückgegeben, die in der Variablen newList
gespeichert wird. Auch in dieser Funktion stehen die beiden Parameter reverse
und key
zur Verfügung. Mit den beiden können wir eine sortierte Liste in umgekehrter Reihenfolge erhalten und die Liste basierend auf einem benutzerdefinierten Schlüssel sortieren. Die folgenden Beispiele zeigen dasselbe.
Beispiel für den Parameter reverse
.
myList = [1, 5, 2, 10, 33, 3, 9]
print("Before called sorted():", myList)
newList = sorted(myList, reverse=True)
print("After called sorted():", myList)
print("New list:", newList)
Ausgabe:
Before called sorted(): [1, 5, 2, 10, 33, 3, 9]
After called sorted(): [1, 5, 2, 10, 33, 3, 9]
New list: [33, 10, 9, 5, 3, 2, 1]
Und ein Beispiel für den Parameter key
.
def byName(entry):
return entry["name"]
def byAge(entry):
return entry["age"]
def byRank(entry):
return entry["rank"]
data = [
{
"name": "Vaibhav",
"age": 18,
"rank": 1,
},
{
"name": "Steve",
"age": 24,
"rank": 5,
},
{
"name": "Olive",
"age": 12,
"rank": 2,
},
{
"name": "Allison",
"age": 17,
"rank": 4,
},
]
print("Original Data")
print(data)
print("Sorted by Name")
nameSorted = sorted(data, key=byName)
print(nameSorted)
print("Sorted by Age")
ageSorted = sorted(data, key=byAge)
print(ageSorted)
print("Sorted by Rank")
rankSorted = sorted(data, key=byRank)
print(rankSorted)
print("Data after all operations")
print(data)
Ausgabe:
Original Data
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]
Sorted by Name
[{'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}]
Sorted by Age
[{'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Sorted by Rank
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}, {'name': 'Steve', 'age': 24, 'rank': 5}]
Data after all operations
[{'name': 'Vaibhav', 'age': 18, 'rank': 1}, {'name': 'Steve', 'age': 24, 'rank': 5}, {'name': 'Olive', 'age': 12, 'rank': 2}, {'name': 'Allison', 'age': 17, 'rank': 4}]