Posortowane w Pythonie ()

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 Trueposortowana lista jest odwrócona (lub posortowana w kolejności malejącej). Domyślnie, Falsejeś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 reverseparametr jako opcjonalny argument.

Ustawienie reverse = Truesortuje 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ż keyfunkcję 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, lambdafunkcja jest używana wewnątrz keyzamiast przekazywania oddzielnej nazwy funkcji.

Powyższy program można napisać za pomocą lambdafunkcji 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.

Interesujące artykuły...