Funkcja sortowana () zwraca posortowaną listę z elementów w iterowalnej.
sorted()
Funkcja sortuje elementy dana iterable w kolejności określonej (bądź rosnąco lub malejąco ) i zwraca klasyfikowane iterable w postaci listy.
Składnia sorted()
funkcji to:
posortowane (iterowalne, klucz = brak, wstecz = fałsz)
Parametry funkcji sortowanej ()
sorted()
może przyjąć maksymalnie trzy parametry:
- iterowalny - sekwencja (ciąg, krotka, lista) lub kolekcja (zbiór, słownik, zestaw zamrożony) lub dowolny inny iterator.
- reverse (opcjonalnie) - jeśli
True
posortowana lista jest odwrócona (lub posortowana w kolejności malejącej). Domyślnie,False
jeśli nie podano. - key (opcjonalnie) - funkcja, która służy jako klucz do porównania sortowania. Domyślnie
None
.
Przykład 1: Sortuj ciąg, listę i krotkę
# vowels list py_list = ('e', 'a', 'u', 'o', 'i') print(sorted(py_list)) # string py_string = 'Python' print(sorted(py_string)) # vowels tuple py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple))
Wynik
('a', 'e', 'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('a' , „e”, „i”, „o”, „u”)
Zauważ, że we wszystkich przypadkach zwracana jest posortowana lista.
Uwaga: lista zawiera również metodę sort (), która działa tak samo jak sorted()
. Jedyna różnica polega na tym, że sort()
metoda nie zwraca żadnej wartości i zmienia oryginalną listę.
Przykład 2: Sortuj w porządku malejącym
sorted()
Funkcja przyjmuje reverse
parametr jako opcjonalny argument.
Ustawienie reverse = True
sortuje iterowalne w kolejności malejącej.
# set py_set = ('e', 'a', 'u', 'o', 'i') print(sorted(py_set, reverse=True)) # dictionary py_dict = ('e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5) print(sorted(py_dict, reverse=True)) # frozen set frozen_set = frozenset(('e', 'a', 'u', 'o', 'i')) print(sorted(frozen_set, reverse=True))
Wynik
('u', 'o', 'i', 'e', 'a') ('u', 'o', 'i', 'e', 'a') ('u', 'o' , „i”, „e”, „a”)
key Parametr w funkcji sortowanej () w języku Python
Jeśli chcesz mieć własną implementację do sortowania, sorted()
akceptuje również key
funkcję jako opcjonalny parametr.
Na podstawie zwróconej wartości funkcji klucza można posortować daną iterowalność.
posortowane (iterowalne, klucz = len)
Oto len()
wbudowana funkcja Pythona do zliczania długości obiektu.
Lista jest sortowana na podstawie długości elementu, od najmniejszej do największej liczby.
Przykład 3: Sortuj listę za pomocą funkcji sortowania () mającej funkcję klucza
# take the second element for sort def take_second(elem): return elem(1) # random list random = ((2, 2), (3, 4), (4, 1), (1, 3)) # sort list with key sorted_list = sorted(random, key=take_second) # print list print('Sorted list:', sorted_list)
Wynik
Posortowana lista: ((4, 1), (2, 2), (1, 3), (3, 4))
Przykład 4: Sortowanie za pomocą wielu kluczy
Załóżmy, że mamy następującą listę:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100, Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) )
Chcemy uporządkować listę w taki sposób, aby uczeń z najwyższymi ocenami był na początku. W przypadku, gdy uczniowie mają równe oceny, należy je posortować tak, aby młodszy uczestnik był pierwszy.
Możemy osiągnąć ten typ sortowania za pomocą wielu kluczy, zwracając krotkę zamiast liczby.
Dwie krotki można porównać, porównując ich elementy, zaczynając od pierwszej. Jeśli występuje remis (elementy są równe), porównywany jest drugi element i tak dalej.
>>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True
Użyjmy tej logiki, aby zbudować naszą logikę sortowania.
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) def sorter(item): # Since highest marks first, least error = most marks error = 100 - item(1) age = item(2) return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list)
Wynik
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Ponieważ funkcja logiki sortowania jest mała i mieści się w jednym wierszu, lambda
funkcja jest używana wewnątrz key
zamiast przekazywania oddzielnej nazwy funkcji.
Powyższy program można napisać za pomocą lambda
funkcji w następujący sposób:
# Nested list of student's info in a Science Olympiad # List elements: (Student's Name, Marks out of 100 , Age) participant_list = ( ('Alison', 50, 18), ('Terence', 75, 12), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 12) ) sorted_list = sorted(participant_list, key=lambda item: (100-item(1), item(2))) print(sorted_list)
Wynik
(('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) )
Aby dowiedzieć się więcej o funkcjach lambda, odwiedź stronę Python Lambda Functions.