Jak sortować listę w Pythonie (rosnąco i malejąco)

Dowiedz się, jak sortować listę w Pythonie za pomocą metody sort() i funkcji sorted(). Odkryj przykłady niestandardowego sortowania kluczy i odwrotnej kolejności.

Wypróbuj to rozwiązanie w Edytorze

Przegląd

Sortowanie danych to jedno z najczęstszych zadań w programowaniu, niezależnie od tego, czy porządkujesz profile użytkowników według wieku, wystawiasz produkty według ceny, czy organizujesz wyniki wyszukiwania. Python oferuje dwa wbudowane, wysoce zoptymalizowane sposoby sortowania list: metodę `list.sort()` i funkcję `sorted()`. Obydwa wykorzystują wysoce wydajny algorytm sortowania o nazwie Timsort, który działa ze złożonością czasową O(N log N).

Kluczową różnicą między nimi jest zmienność. Metoda `list.sort()` sortuje listę w miejscu, co oznacza, że ​​bezpośrednio modyfikuje oryginalną listę i zwraca wartość `None`. Z drugiej strony funkcja `sorted()` pozostawia oryginalną listę bez zmian i zwraca zupełnie nową posortowaną listę. To rozróżnienie jest kluczowe: użyj `sort()`, jeśli chcesz zaoszczędzić pamięć i nie potrzebujesz pierwotnej kolejności, i użyj `sorted()`, gdy chcesz zachować oryginalną listę w stanie nienaruszonym lub podczas sortowania iterowalnych elementów niebędących listami, takich jak krotki lub słowniki.

Obie metody sortowania akceptują dwa opcjonalne argumenty słów kluczowych: „reverse” i „key”. Argument „odwrotny” jest wartością logiczną; ustawienie go na „True” sortuje listę w kolejności malejącej (odwrotnej). Argument „klucz” akceptuje funkcję, która jest stosowana do każdego elementu przed porównaniem. Pozwala to na złożoną logikę sortowania, taką jak sortowanie listy ciągów znaków według ich długości lub sortowanie listy słowników według określonego klucza.

Dane wyjściowe kodu i wykonania

Ten kod demonstruje sortowanie listy liczb przy użyciu funkcji sort() i sorted(), sortowanie odwrotne i niestandardowe sortowanie kluczy według długości łańcucha.

numbers = [42, 7, 12, 89, 23]

# 1. Using sorted() (returns new list)
new_sorted = sorted(numbers)
print("Original:", numbers)
print("Sorted new list:", new_sorted)

# 2. Using sort() (in-place modification)
numbers.sort()
print("Modified original list:", numbers)

# 3. Sorting in reverse (descending)
numbers.sort(reverse=True)
print("Reverse sorted list:", numbers)

# 4. Custom sorting (by string length)
words = ["banana", "pear", "apple", "fig"]
words.sort(key=len)
print("Sorted by length:", words)
Wyjście terminala
Original: [42, 7, 12, 89, 23]
Sorted new list: [7, 12, 23, 42, 89]
Modified original list: [7, 12, 23, 42, 89]
Reverse sorted list: [89, 42, 23, 12, 7]
Sorted by length: ['fig', 'pear', 'apple', 'banana']

Wdrażanie krok po kroku

  • Użyj funkcji sorted(), aby posortować kopię listy bez zmiany oryginalnych danych.
  • Użyj metody .sort() bezpośrednio na obiekcie listy, aby zmodyfikować go lokalnie i zaoszczędzić pamięć.
  • Przekaż Reverse=True jako parametr, aby posortować elementy w kolejności malejącej.
  • Użyj key=lambda x: ..., aby posortować elementy na podstawie właściwości niestandardowych (takich jak długość lub wartości zagnieżdżone).

Często zadawane pytania

Jaka jest różnica między list.sort() a sorted()?

list.sort() modyfikuje listę na miejscu i zwraca None, podczas gdy sorted() pozostawia oryginalną listę bez zmian i zwraca nową posortowaną listę.

Jak posortować listę słowników według klucza?

Użyj parametru key z funkcją lambda lub operator.itemgetter. Na przykład: list.sort(key=lambda item: item["age"]).

Powiązane tematy

Polecane zasoby Pythona

Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.