JavaRush/Курси/Модуль 1: Python Core/Сортування списків

Сортування списків

Відкрита

8.1 Сортування списку

Сортування списку в Python — важлива операція і вона дозволяє впорядковувати дані для зручності їх аналізу або представлення. Python пропонує декілька способів сортування списків, кожен з яких може бути корисним залежно від завдання і необхідних результатів.

Метод sort()

Метод sort() сортує список на місці, тобто змінює вихідний список. Він дуже ефективний і дозволяє налаштувати сортування через аргументи.

numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers)  # Виведе [1, 2, 5, 9]

Можна сортувати список в зворотному порядку, встановивши параметр reverse=True.

numbers = [5, 2, 9, 1]
numbers.sort(reverse=True)
print(numbers)  # Виведе [9, 5, 2, 1]

Функція sorted()

Функція sorted() створює новий список, який є відсортованою версією вихідного. Вихідний список при цьому не змінюється, що часто робить sorted() кращим вибором при необхідності зберегти вихідні дані без змін.

numbers = [5, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # Виведе [1, 2, 5, 9]
print(numbers)  # Вихідний список не змінений [5, 2, 9, 1]

Важливо пам'ятати, що sort() змінює оригінальний список, а sorted() повертає новий відсортований список, залишаючи оригінал незмінним. Використовуйте sort(), якщо вам потрібно змінити дані на місці, і sorted(), якщо ви хочете зберегти вихідний порядок даних.

8.2 Сортування за ключем

Іноді бувають потрібні складні сценарії сортування, або сортування з ігноруванням деяких параметрів. В цьому випадку нам на допомогу приходить «сортування за ключем». Для його використання потрібно передати в метод sort() або функцію sorted() спеціальний параметр — key.

В якості значення параметра key потрібно передати функцію, яка буде використовуватися при порівнянні елементів.

Порівняння рядків без урахування регістру

Перед порівнянням всі рядки приводяться до нижнього регістру

alist = ["banana", "Orange", "Kiwi", "cherry"]
alist.sort(key=str.lower)
print(alist)  # Виведе ['banana', 'cherry', 'Kiwi', 'Orange']

Приклад сортування списку кортежів

Припустимо, у вас є список студентів, де кожен елемент — це кортеж (tuple), що містить ім'я студента та його оцінку. Ви хочете відсортувати студентів за їх оцінками:

students = [('Alice', 88), ('Bob', 75), ('Carol', 96)]

def get_grade(student):
    return student[1]

students.sort(key=get_grade)
print(students)  # Виведе [('Bob', 75), ('Alice', 88), ('Carol', 96)]

Приклад сортування списку словників

Або у вас список словників, де кожен словник містить інформацію про студентів. Для того щоб відсортувати їх за оцінками, потрібно написати код такого типу:

students = [
    {'name': 'Alice', 'grade': 88},
    {'name': 'Bob', 'grade': 75},
    {'name': 'Carol', 'grade': 96}
]

def get_grade(student):
    return student['grade']

sorted_students = sorted(students, key=get_grade)
print(sorted_students)  # Виведе [{'name': 'Bob', 'grade': 75}, {'name': 'Alice', 'grade': 88}, {'name': 'Carol', 'grade': 96}]
2
Задача
Модуль 1: Python Core,  5 рівень,  7 лекція
Недоступна
Сортування
Сортування
2
Задача
Модуль 1: Python Core,  5 рівень,  7 лекція
Недоступна
Сортування рядків за довжиною
Сортування рядків за довжиною
Коментарі (7)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
Матвій
Рівень 16
20 червня 2025, 14:47
Як ми мали розв'язати другу задачу... Там використовують key=len, який ми не вчили...
14 грудня 2024, 15:29
students = [('Alice', 88), ('Bob', 75), ('Carol', 96)]

def get_grade(student):
    return student[1]

students.sort(key=get_grade)
Не зрозуміло. Функція get_grade очікує аргумент (student) але при викликі (key=get_grade) нічого не передається.... Більш того... я вирішив задачу на цю тему з першого разу... але не зовсім звозумів..
Mykola
Рівень 21
16 січня 2025, 09:27
я за звичай сиджу 10-15 хвилин над проблемою. Ну максимум 20, якщо бачу, що ось-ось... Далі шукаю можливі вирішення проблеми на просторах інтернет і намагаюся за щось зачіпитися, щоб вирішити задачу. Ну й нарешті у безнадійних випадках - GPT-Chat. Навіть якщо я вирішив, але не зрозумів як і чому це спрацювало, цей хлоп розкладе все по поличках і наведе декілька схожих прикладів. Таке навчання сприяє більшому прогресу, розумінню й засвоєнню матеріалу (ну як мінімум у мене).
3 червня 2025, 10:30
При виклику key=get_grade передається другий елемент кожного кортежу
Semen
Рівень 21
17 червня 2025, 10:26
Не зовсім так.В get_grade передається кожен елемент списку, тобто кортеж, і для порівняння get_grade повертає другий елемент цього кортежу.
Nikolay
Рівень 11
10 листопада 2025, 16:27
також поки не зрозуміло чому передається парметр (student) якого ніде в коді нема. наш список має назву "students", як компілятор взагалі розуміє звітки той student взявся?
Gena
Рівень 45
18 березня, 19:34
Другий елемент береться з ключа student[1]. Якщо прибрати [1] чи замінити на [0], то сортування буде за іменем. Слово student - це параметер ф-ції який приходить, його можна змінити на будь-яке, наприклад text. Простими словами ми говоримо, приходить наприклад text/student/number/name_all, будь що, головне не забути що тепер ми працюємо з цим параметром який ми назвали