PorównaniePorównania

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.

Na tej stronie

Porównanie w tabeli

#

Przykład

#
Python
scores = [72, 95, 64, 88]
scores.sort()
print(scores)

names = ("Ola", "ania", "Kuba")
print(sorted(names, key=str.lower))
print(names)
Wynikzapisany wynik, możesz go sprawdzić
[64, 72, 88, 95]
['ania', 'Kuba', 'Ola']
('Ola', 'ania', 'Kuba')

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

#
Składnia
lista.sort(key=None, reverse=False)
sorted(iterable, key=None, reverse=False)

Więcej przykładów

#
sort() zwraca None, nie przypisuj wyniku
Python
tasks = ["c", "a", "b"]
tasks = tasks.sort()
print(tasks)
Wynikzapisany wynik, możesz go sprawdzić
None
sorted() działa też na napisach
Python
word = "python"
print(sorted(word))
print(sorted(word, reverse=True))
Wynikzapisany wynik, możesz go sprawdzić
['h', 'n', 'o', 'p', 't', 'y']
['y', 't', 'p', 'o', 'n', 'h']

Dobre praktyki

#
  • Jeśli chcesz sortować listę bez zmiany oryginału, użyj sorted(lista), a nie kopiowania listy i sort().
  • Do sortowania po kilku kryteriach podaj w key krotkę, np. key=lambda s: (-s["points"], s["name"]).
  • Polskie znaki domyślnie sortują się za "z". Do poprawnego sortowania użyj modułu locale albo biblioteki PyICU.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.