У цій статті ви опануєте навички сортування списків у Python.
В Python існує можливість застосування методу sort()
для безпосереднього сортування списку. Також можна скористатися вбудованою функцією sorted()
, яка повертає відсортовану копію списку, залишаючи оригінал без змін.
У цьому довіднику ви ознайомитеся з:
- Структурою методу
sort()
та функціїsorted()
. - Прикладами програмного коду для сортування списків у порядку зростання та спадання.
- Можливостями налаштування процесу сортування за допомогою параметра
key
. - Ключовими відмінностями між
sort()
іsorted()
.
Розпочнімо навчання!👩🏽💻
Структура методу sort()
у Python
Метод sort()
застосовується до об’єктів-списків у Python. Він модифікує список безпосередньо, сортуючи його елементи “на місці”.
Синтаксис методу sort()
виглядає наступним чином:
<list>.sort(reverse = True | False, key = <func>)
Розглянемо структуру цього синтаксису детальніше:
<list>
– це будь-який коректний об’єкт-список у Python.reverse
– це необов’язковий параметр, який може приймати значенняTrue
абоFalse
.- За замовчуванням
reverse
має значенняFalse
, що означає сортування списку за зростанням. Якщо встановитиTrue
, список сортуватиметься у порядку спадання. key
також є необов’язковим параметром, якому присвоюється значення<func>
.<func>
може бути як вбудованою функцією, так і функцією, визначеною користувачем.
У наступному розділі ви почнете роботу з простими прикладами коду.
Сортування списку Python за зростанням
Розглянемо приклад списку чисел. Щоб відсортувати його у порядку зростання, потрібно викликати метод sort()
для цього списку.
▶ Запустіть наступний код.
nums = [25,13,6,17,9]
nums.sort()
print(nums)
# Результат: [6, 9, 13, 17, 25]
Числовий список був відсортований за зростанням, при цьому вихідний список був модифікований. Це і є сортування “на місці”.
Сортування списку Python у порядку спадання
Для сортування списку у порядку спадання потрібно встановити значення True
для параметра reverse
, як показано нижче.
nums = [25,13,6,17,9]
nums.sort(reverse = True)
print(nums)
# Результат: [25, 17, 13, 9, 6]
Як бачите, тепер список відсортовано в порядку спадання.
Використання параметра key
з методом sort()
У цьому розділі ми розглянемо, як використовувати параметр key
для налаштування сортування.
Тут mod5()
– це функція, яка приймає число x
і повертає залишок від ділення числа x
на 5.
def mod5(x):
return x % 5
Ми хочемо використовувати цю функцію в якості ключа сортування.
Тепер запустіть наступний код.
nums = [25,13,6,17,9]
nums.sort(key = mod5)
print(nums)
# Результат: [25, 6, 17, 13, 9]
Проаналізуйте виведені дані.
Зверніть увагу, що тепер сортування налаштовано на основі значення, яке повертає функція mod5
, а не стандартним чином.
- Число, яке дає найменший залишок при діленні на 5, стає першим.
- Число з найбільшим залишком при діленні на 5 стає останнім елементом відсортованого списку.
Щоб впевнитися, що це дійсно так, виконайте наступний код.
nums = [25,13,6,17,9]
for num in nums:
print(f"{num} залишає залишок {num%5} при діленні на 5")
# Результат
25 залишає залишок 0 при діленні на 5
13 залишає залишок 3 при діленні на 5
6 залишає залишок 1 при діленні на 5
17 залишає залишок 2 при діленні на 5
9 залишає залишок 4 при діленні на 5
25 ділиться на 5 без залишку, залишок дорівнює 0. Тому це перший елемент у відсортованому списку. 6 має залишок 1, тому це другий елемент і т.д. 9 має залишок 4 при діленні на 5, і це останній елемент у відсортованому списку.
Замість того, щоб визначати окрему функцію, можна скористатися лямбда-функціями. У Python лямбда-вирази є однорядковими анонімними функціями. lambda arguments: expression
– повертає вираз, обчислений на основі аргументів.
Перепишемо попередній приклад сортування з використанням лямбда-виразу.
nums = [25,13,6,17,9]
nums.sort(key = lambda x:x%5)
print(nums)
# Результат: [25, 6, 17, 13, 9]
До цього моменту ви навчилися сортувати списки чисел. Розглянемо, як можна сортувати списки рядків у Python.
Сортування списку Python в алфавітному порядку
У цьому розділі ви навчитеся сортувати списки рядків на прикладах, натхненних історіями про Гаррі Поттера. ✨
У нашому прикладі students
– це список студентів Хогвартсу. Ми хочемо відсортувати їх в алфавітному порядку імен.
При сортуванні списку рядків за замовчуванням застосовується алфавітний порядок.
students = ["Harry","Ron","Hermione","Draco","Cedric"]
Виведемо відсортований список, щоб перевірити результат сортування.
students.sort()
print(students)
# Результат
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']
Сортування списку Python у зворотному алфавітному порядку
Щоб відсортувати список у зворотному алфавітному порядку, встановіть reverse = True
, як показано у наступному фрагменті коду.
students.sort(reverse = True)
print(students)
# Результат
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']
З результату видно, що список справді відсортовано у зворотному порядку.
Налаштування сортування за допомогою параметра key
У цьому розділі ми налаштуємо сортування з використанням додаткового параметра key
.
Розглянемо наступний список, houses
.
houses = [
{1:"Draco","house":"Slytherin"},
{2:"Harry","house":"Gryffindor"},
{3:"Cedric","house":"Hufflepuff"}
]
Тут houses
– це список словників. Кожен словник містить дві пари “ключ-значення”, одна з яких позначає імена студентів, а друга – гуртожиток, до якого вони належать.
Ми хочемо відсортувати цей список гуртожитків в алфавітному порядку назв гуртожитків.
Як ви вже могли здогадатися, нам потрібно встановити параметр key
на значення гуртожитку конкретних студентів.
Щоб отримати гуртожиток кожного студента, можна визначити функцію returnHouse()
, як показано нижче.
def returnHouse(student):
return student['house']
Ця функція повертає назву гуртожитку, до якого належить конкретний студент.
Тепер ви можете викликати метод sort()
для списку houses
, як показано нижче.
houses.sort(key=returnHouse)
У вихідних даних нижче, зверніть увагу, як список відсортовано за гуртожитками, а не за іменами студентів. Тому ми бачимо Гриффіндор, Гафелпаф та Слизерин у алфавітному порядку.
print(houses)
# Результат
[{2: 'Harry', 'house': 'Gryffindor'},
{3: 'Cedric', 'house': 'Hufflepuff'},
{1: 'Draco', 'house': 'Slytherin'}]
Щоб належним чином визначити параметр key
, можна також скористатися лямбда-функцією. Для кожного елемента списку ця функція повертає назву гуртожитку для цього елемента списку.
▶ Запустіть наступний код, щоб переконатися.
houses.sort(key=lambda student:student["house"])
print(houses)
# Результат
[{2: 'Harry', 'house': 'Gryffindor'},
{3: 'Cedric', 'house': 'Hufflepuff'},
{1: 'Draco', 'house': 'Slytherin'}]
У всіх наведених прикладах ви використовували метод sort()
для списку. І тепер ви знаєте, що він змінює вихідний список.
А що робити, якщо ви хочете зберегти оригінальний список, але отримати відсортовану копію списку?
У Python для цього можна використовувати функцію sorted()
.
Структура функції sorted()
у Python
Функція sorted()
приймає список або будь-яку колекцію як аргумент. Вона повертає відсортовану копію списку, а вихідний список залишається без змін.
Синтаксис функції sorted()
у Python виглядає так:
<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)
Зверніть увагу, що синтаксис дуже схожий на метод sort()
, який ми розглядали раніше.
<list>
– це будь-який коректний об’єкт-список у Python і є обов’язковим параметром.reverse
таkey
є необов’язковими параметрами.
Примітка: на відміну від методу sort()
, який працює лише зі списками, функцію sorted()
можна використовувати для сортування будь-якого ітерабельного об’єкту у Python, наприклад, списків, рядків і словників.
Сортування списку Python за допомогою функції sorted()
#1. У цьому прикладі nums
– це список чисел.
Ви можете викликати функцію sorted()
з nums
як аргументом і призначити результат до списку sorted_nums1
.
nums = [25,13,6,17,9]
sorted_nums1 = sorted(nums)
print(sorted_nums1)
# Результат: [6, 9, 13, 17, 25]
У вихідних даних вище видно, що список nums
відсортовано за зростанням за замовчуванням.
Також зверніть увагу, що вихідний список nums
не змінено, оскільки sorted()
повертає новий список. Це продемонстровано нижче.
print(nums)
# Результат: [25, 13, 6, 17, 9]
#2. Тепер встановіть додатковий параметр reverse
на True
і отримайте sorted_nums2
.
Як показано в коді нижче, sorted_nums2
– це новий список з елементами, відсортованими в порядку спадання.
sorted_nums2 = sorted(nums,reverse = True)
print(sorted_nums2)
# Результат: [25, 17, 13, 9, 6]
#3. У цьому прикладі попрацюємо зі списком рядків.
Як і в попередніх прикладах, виклик функції sorted()
повертає новий список. І елементи відсортовані в алфавітному порядку.
fruits = ['pears','strawberry','apple','pineapple','blueberry']
sorted_fr1 = sorted(fruits)
print(sorted_fr1)
# Результат:
['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']
#4. Тепер налаштуємо сортування за допомогою додаткового параметра key
. Встановіть key
на len
. Це відсортує список на основі довжини рядків.
Примітка: у Python вбудована функція len()
приймає будь-який ітерабельний об’єкт, наприклад, списки, рядки, кортежі і т.д., та повертає довжину ітерабельного об’єкта.
Рядок з найкоротшою довжиною з’являється першим у відсортованому списку, а найдовший – в кінці відсортованого списку.
fruits = ['pear','strawberry','apple','pineapple','blueberry']
sorted_fr2 = sorted(fruits,key=len)
print(sorted_fr2)
# Результат:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']
У вихідних даних вище pear
– найкоротший рядок, а strawberry
– найдовший.
Метод sort()
Python проти функції sorted()
На даний момент ви навчилися використовувати метод sort()
і функцію sorted()
. У цьому розділі ми підсумуємо відмінності між цими двома способами.
Python .sort() |
Python sorted() |
Сортує список безпосередньо – змінює оригінальний список. | Повертає новий відсортований список. |
Працює тільки зі списками Python. | Працює з ітерабельними об’єктами Python, такими як списки, рядки та інші колекції. |
Має тип повернення None . |
Повертає відсортовану копію ітерабельного об’єкта. |
Підсумки 👩🏫
Сподіваємося, цей посібник зі списками Python був для вас корисним.
Давайте коротко підсумуємо те, що ми розглянули:
- Використовуйте
list.sort(reverse = True | False, key = <func>)
з необов’язковими параметрамиreverse
іkey
для сортування списку “на місці”. - Використовуйте
sorted(list, reverse = True | False, key = <func>)
, щоб отримати відсортовану копію списку.
Тепер, коли ви навчилися сортувати списки Python, дізнайтеся про генератори списків у Python. Або ви також можете навчитися обробляти файли або працювати з файлами JSON у Python.
Ви можете спробувати наведені вище приклади в онлайн-компіляторі Python techukraine.net.