Sortowanie według wielu pól
Rozstrzyganie remisów za pomocą kluczy-krotek i reverse
Sortowanie według wielu pól to bezpłatna lekcja Coding Interview Prep na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Coding Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.
Gdy jeden klucz nie wystarcza
Czasami elementy mają taką samą wartość pierwszego pola i trzeba rozstrzygnąć remis. Rozwiązaniem jest klucz krotkowy, który wymienia pola w kolejności ich priorytetu.
Krotki są porównywane od lewej do prawej
Python porównuje krotki element po elemencie: sprawdza pierwszy element, a na drugi patrzy dopiero wtedy, gdy pierwszy jest równy.
print((1, 9) < (1, 2)) # False
print((1, 2) < (2, 0)) # TrueKlucz krotkowy dla dwóch pól
Funkcja key powinna zwracać krotkę, aby sortować najpierw według pierwszego pola, a następnie według drugiego. W ten sposób osoby są sortowane najpierw według wieku, a potem według imienia.
people.sort(key=lambda p: (p.age, p.name))Kolejność główna i pomocnicza
Pole najbardziej po lewej stronie określa główne sortowanie, a kolejne pole rozstrzyga remisy. Zmiana kolejności elementów krotki zmienia pole decydujące o kolejności.
data = [(2, "b"), (1, "z"), (1, "a")]
print(sorted(data))
# [(1, 'a'), (1, 'z'), (2, 'b')]Połączenie kolejności rosnącej i malejącej
Aby jedno pole sortować rosnąco, a drugie malejąco, należy zanegować pole liczbowe, które ma być sortowane malejąco, wewnątrz klucza krotkowego.
items.sort(key=lambda x: (x.group, -x.score))Sztuczka z negacją wymaga liczb
Sztuczka ze znakiem minus działa tylko dla liczb. Aby odwrócić kolejność pola typu string, należy zastosować sortowanie warstwowe zamiast negacji.
Stabilne sortowanie pozwala tworzyć warstwy
Ponieważ sortowanie jest stabilne, można najpierw sortować według mniej ważnego klucza, a następnie według ważniejszego, zachowując poprawną kolejność remisów.
rows.sort(key=lambda r: r.name)
rows.sort(key=lambda r: r.age, reverse=True)Sortowanie warstwowe a jedna krotka
Jeden klucz krotkowy jest szybszy i czytelniejszy w prostych przypadkach. Sortowanie warstwowe sprawdza się, gdy jedno pole ma być uporządkowane rosnąco jako napis, a drugie malejąco.
itemgetter dla szybkości
W przypadku krotek indeksowanych itemgetter jest przejrzystym i szybkim kluczem. Pobiera kilka pól naraz, zgodnie z ich priorytetem.
from operator import itemgetter
rows.sort(key=itemgetter(1, 0))Rozstrzyganie remisów zapewnia deterministyczny wynik
Dodanie na końcu unikatowego elementu rozstrzygającego remis, takiego jak id, sprawia, że wynik jest stabilny między uruchomieniami, co doceniają systemy z rygorystycznym sprawdzaniem.
Planowanie klucza przed kodowaniem
Należy przeczytać treść zadania i zapisać pola sortowania w odpowiedniej kolejności. Przejrzysty klucz krotkowy zamienia skomplikowane porównywanie w jedną krótką linię.
Szybki sprawdzian
Studenci mają być posortowani rosnąco według ocen, a następnie rosnąco według imion.
Podsumowanie
Można rozstrzygać remisy za pomocą klucza krotkowego, negować liczby przy sortowaniu malejącym i tworzyć sortowania warstwowe dla mieszanych kierunków. Elementy rozstrzygające remisy zapewniają przejrzysty wynik. ✅
Często zadawane pytania
Czy lekcja „Sortowanie według wielu pól” jest bezpłatna?
Tak — pełny tekst „Sortowanie według wielu pól” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Coding Interview Prep, przejdź na CoddyKit PRO. Kurs Coding Interview Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Sortowanie według wielu pól”?
Rozstrzyganie remisów za pomocą kluczy-krotek i reverse Ćwiczysz Coding Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Coding Interview Prep?
Nie wymagamy żadnego doświadczenia. Coding Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Sortowanie według wielu pól”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Coding Interview Prep?
Tak. Każda lekcja Coding Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- sorted() i funkcja key
- Sortowanie według wielu pól
- Własna kolejność z functools.cmp_to_key
- Dlaczego sortowanie odblokowuje rozwiązania