sort() vs sorted()
list.sort() sortuje listę w miejscu i zwraca None, a sorted() zwraca nową, posortowaną listę z dowolnej kolekcji i nie zmienia oryginału.
Porównanie w tabeli
#Co zwraca
- list.sort()
None- sorted()
- Nową, posortowaną listę
Zmienia oryginał
- list.sort()
- Tak, w miejscu
- sorted()
- Nie
Działa na
- list.sort()
- Tylko na liście
- sorted()
- Dowolnym obiekcie iterowalnym
Parametry key i reverse
- list.sort()
- Tak
- sorted()
- Tak
Stabilność sortowania
- list.sort()
- Tak
- sorted()
- Tak
Typowe użycie
- list.sort()
- Lista, której oryginalna kolejność jest już niepotrzebna
- sorted()
- Krotka, zbiór, napis albo gdy oryginał ma zostać
Przykład
#scores = [72, 95, 64, 88]
scores.sort()
print(scores)
names = ("Ola", "ania", "Kuba")
print(sorted(names, key=str.lower))
print(names)Definicja i zastosowanie
#Obie służą do sortowania i przyjmują te same parametry: key z funkcją wyliczającą klucz oraz reverse=True dla kolejności malejącej. Sortowanie w obu przypadkach jest stabilne: elementy o równych kluczach zachowują wzajemną kolejność.
Różnią się tym, co się dzieje z danymi. Metoda sort() zmienia listę w miejscu i zwraca None, więc zapis lista = lista.sort() zamieni listę na None. Działa tylko na listach. Funkcja sorted() tworzy nową listę i ją zwraca, nie dotykając oryginału, a przyjmuje dowolny obiekt iterowalny: listę, krotkę, zbiór czy napis.
Gdy oryginalna kolejność nie jest już potrzebna i sortujesz listę, sort() jest trochę szybszy, bo nie tworzy nowej listy. Gdy chcesz zachować oryginał, sortujesz coś innego niż listę albo potrzebujesz wyniku w tym samym wyrażeniu, na przykład w pętli for albo w argumencie funkcji, użyj sorted().
Składnia
#lista.sort(key=None, reverse=False)
sorted(iterable, key=None, reverse=False)Więcej przykładów
#tasks = ["c", "a", "b"]
tasks = tasks.sort()
print(tasks)word = "python"
print(sorted(word))
print(sorted(word, reverse=True))Dobre praktyki
#- Jeśli chcesz sortować listę bez zmiany oryginału, użyj
sorted(lista), a nie kopiowania listy isort(). - Do sortowania po kilku kryteriach podaj w
keykrotkę, np.key=lambda s: (-s["points"], s["name"]). - Polskie znaki domyślnie sortują się za "z". Do poprawnego sortowania użyj modułu
localealbo bibliotekiPyICU.
Powiązane hasła
#Widzisz błąd albo brakuje przykładu? Napisz do nas.