Функція sorted() сортує елементи вказаного ітерованого об’єкта в певному порядку (за зростанням або за спаданням) і повертає їх у вигляді списку. Наприклад:
|
1 2 3 4 |
numbers = [4, 2, 12, 8] sorted_numbers = sorted(numbers) print(sorted_numbers) |
Результат:
[2, 4, 8, 12]
Синтаксис функції sorted()
|
1 |
sorted(iterable, key=None, reverse=False) |
Параметри функції sorted()
Функція sorted() може приймати максимум три параметри:
iterable — послідовність (рядок, кортеж, список) або колекція (множина, словник, заморожена множина) або будь-який інший ітератор;
key (не обов’язково) — функція, яка є ключем для виконання сортування. За замовчуванням використовується None;
reverse (не обов’язково) — якщо значення дорівнює True, то відсортований список буде “зворотним” (або відсортованим за спаданням). За замовчуванням використовується значення False.
Значення, яке повертає функція sorted()
Функція sorted() повертає відсортований список.
Приклад №1: Сортування списку, рядку та кортежу
|
1 2 3 4 5 6 7 8 9 10 11 |
# Список голосних py_list = ['e', 'a', 'u', 'o', 'i'] print(sorted(py_list)) # Рядок py_string = 'Python' print(sorted(py_string)) # Кортеж голосних py_tuple = ('e', 'a', 'u', 'o', 'i') print(sorted(py_tuple)) |
Результат:
['a', 'e', 'i', 'o', 'u']
['P', 'h', 'n', 'o', 't', 'y']
['a', 'e', 'i', 'o', 'u']
Зверніть увагу, що у всіх випадках повертається відсортований список.
Примітка: Список також має метод sort(), який працює аналогічно функції sorted(). Єдина відмінність полягає в тому, що метод sort() не повертає жодного значення та змінює вихідний список.
Приклад №2: Сортування у порядку спадання
Функція sorted() приймає параметр reverse як необов’язковий аргумент. Установка reverse = True сортує ітерований об’єкт в порядку спадання.
|
1 2 3 4 5 6 7 8 9 10 11 |
# Множина py_set = {'e', 'a', 'u', 'o', 'i'} print(sorted(py_set, reverse=True)) # Словник py_dict = {'e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5} print(sorted(py_dict, reverse=True)) # Заморожена множина 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', 'o', 'i', 'e', 'a']
Параметр key в функції sorted() в Python
Якщо потрібна власна реалізація сортування, то функція sorted() приймає функцію key як необов’язковий параметр. На основі поверненого значення key ми можемо відсортувати вказаний ітерований об’єкт.
|
1 |
sorted(iterable, key=len) |
Тут len() — це вбудована функція в Python для обчислення довжини об’єкта. Список сортується в залежності від довжини елемента, від найменшого значення до найбільшого.
Приклад №3: Сортування списку за допомогою функції sorted(), яка має функцію key
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Беремо другий елемент для сортування def take_second(elem): return elem[1] # Випадковий список random = [(2, 2), (3, 4), (4, 1), (1, 3)] # Сортуємо список за допомогою параметра key sorted_list = sorted(random, key=take_second) # Виводимо список print('Sorted list:', sorted_list) |
Результат:
Sorted list: [(4, 1), (2, 2), (1, 3), (3, 4)]
Приклад №4: Сортування з кількома ключами
Припустимо, що ми маємо наступний список:
|
1 2 3 4 5 6 7 8 9 10 |
# Вкладений список інформації про студентів. # Елементи списку: (Ім'я студента, Оцінка зі 100, Вік) participant_list = [ ('Alison', 50, 18), ('Terence', 75, 22), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 22) ] |
Ми хочемо відсортувати список таким чином, щоб студенти з високими оцінками були на початку. Якщо у студентів однакові оцінки, їх необхідно відсортувати так, щоб молодший учасник виявився першим. Ми можемо досягти такого типу сортування з кількома ключами, повертаючи кортеж замість числа.
Два кортежі можна порівняти, починаючи з першого елемента. Якщо елементи рівні, порівнюється другий елемент і так далі.
|
1 2 3 4 5 6 |
>>> (1,3) > (1, 4) False >>> (1,4) < (2, 2) True >>> (1, 4, 1) < (2, 1) True |
Скористаємося цією логікою для побудови нашої логіки сортування:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Вкладений список інформації про студентів. # Елементи списку: (Ім'я студента, Оцінка зі 100, Вік) participant_list = [ ('Alison', 50, 18), ('Terence', 75, 22), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 22) ] def sorter(item): error = 100 - item[1] age = item[2] return (error, age) sorted_list = sorted(participant_list, key=sorter) print(sorted_list) |
Результат:
[('Jimmy', 90, 22), ('Terence', 75, 22), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 22)]
Оскільки логіка сортування всередині функції невелика і вкладається в один рядок, то лямбда-функція використовується всередині параметра key, а не передається як окреме ім’я функції.
Вищенаведена програма може бути переписана з використанням лямбда-функції наступним чином:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Вкладений список інформації про студентів. # Елементи списку: (Ім'я студента, Оцінка зі 100, Вік) participant_list = [ ('Alison', 50, 18), ('Terence', 75, 22), ('David', 75, 20), ('Jimmy', 90, 22), ('John', 45, 22) ] sorted_list = sorted(participant_list, key=lambda item: (100-item[1], item[2])) print(sorted_list) |
Результат:
[('Jimmy', 90, 22), ('Terence', 75, 22), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 22)]

(6 оцінок, середня: 4,67 з 5)