Python отсортировано ()

Функция sorted () возвращает отсортированный список из элементов в итерируемом объекте.

sorted()Функция сортирует элементы заданного итератора в определенном порядке (либо восходящие или нисходящие ) и возвращает отсортированный Iterable в виде списка.

Синтаксис sorted()функции:

 отсортировано (итерация, ключ = нет, обратный = ложь)

Параметры функции sorted ()

sorted() может принимать максимум три параметра:

  • iterable - последовательность (строка, кортеж, список) или коллекция (набор, словарь, замороженный набор) или любой другой итератор.
  • reverse (Необязательно) - если Trueотсортированный список перевернут (или отсортирован в порядке убывания). По умолчанию, Falseесли не указано.
  • key (Необязательно) - функция, которая служит ключом для сравнения сортировки. По умолчанию None.

Пример 1. Сортировка строки, списка и кортежа

 # 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))

Вывод

 ('a', 'e', ​​'i', 'o', 'u') ('P', 'h', 'n', 'o', 't', 'y') ('а' , 'e', ​​'i', 'o', 'u')

Обратите внимание, что во всех случаях возвращается отсортированный список.

Примечание. В списке также есть метод sort (), который работает так же, как sorted(). Единственное отличие состоит в том, что sort()метод не возвращает никакого значения и изменяет исходный список.

Пример 2: Сортировка по убыванию

sorted()Функция принимает reverseпараметр как дополнительный аргумент.

Установка reverse = Trueсортирует итерацию в порядке убывания.

 # 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))

Вывод

 ('u', 'o', 'i', 'e', ​​'a') ('u', 'o', 'i', 'e', ​​'a') ('u', 'о' , 'я', 'е', 'а')

ключевой параметр в функции Python sorted ()

Если вам нужна собственная реализация для сортировки, sorted()также принимает keyфункцию в качестве необязательного параметра.

На основе возвращенного значения ключевой функции вы можете отсортировать данную итерацию.

 отсортировано (повторяется, ключ = len)

Вот len()встроенная функция Python для подсчета длины объекта.

Список сортируется по длине элемента от наименьшего количества к наибольшему.

Пример 3: отсортируйте список с помощью sorted () с ключевой функцией

 # 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)

Вывод

 Отсортированный список: ((4, 1), (2, 2), (1, 3), (3, 4))

Пример 4: Сортировка с использованием нескольких ключей

Допустим, у нас есть следующий список:

 # 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) )

Мы хотим отсортировать список таким образом, чтобы ученик с самыми высокими оценками был в начале. Если ученики имеют одинаковые оценки, их необходимо отсортировать так, чтобы младший участник был первым.

Мы можем добиться этого типа сортировки с несколькими ключами, возвращая кортеж вместо числа.

Два кортежа можно сравнить, сравнивая их элементы, начиная с первого. Если есть связь (элементы равны), сравнивается второй элемент и так далее.

 >>> (1,3)> (1, 4) False >>> (1, 4) >> (1, 4, 1) < (2, 1) True

Давайте воспользуемся этой логикой для построения нашей логики сортировки.

 # 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)

Вывод

 (('Джимми', 90, 22), ('Теренс', 75, 12), ('Дэвид', 75, 20), ('Элисон', 50, 18), ('Джон', 45, 12) )

Поскольку логическая функция сортировки мала и умещается в одной строке, lambdaфункция используется внутри, keyа не передает отдельное имя функции.

Вышеуказанная программа может быть написана с использованием lambdaфункции следующим образом:

 # 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)

Вывод

 (('Джимми', 90, 22), ('Теренс', 75, 12), ('Дэвид', 75, 20), ('Элисон', 50, 18), ('Джон', 45, 12) )

Чтобы узнать больше о лямбда-функциях, посетите Python Lambda Functions.

Интересные статьи...