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

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

Модуль 1: Python Core
Рівень 5 , Лекція 7
Відкрита

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}]
Коментарі (6)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Матвій Рівень 28
20 червня 2025
Як ми мали розв'язати другу задачу... Там використовують key=len, який ми не вчили...
14 грудня 2024

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
я за звичай сиджу 10-15 хвилин над проблемою. Ну максимум 20, якщо бачу, що ось-ось... Далі шукаю можливі вирішення проблеми на просторах інтернет і намагаюся за щось зачіпитися, щоб вирішити задачу. Ну й нарешті у безнадійних випадках - GPT-Chat. Навіть якщо я вирішив, але не зрозумів як і чому це спрацювало, цей хлоп розкладе все по поличках і наведе декілька схожих прикладів. Таке навчання сприяє більшому прогресу, розумінню й засвоєнню матеріалу (ну як мінімум у мене).
Наталья Крейц Рівень 18
3 червня 2025
При виклику key=get_grade передається другий елемент кожного кортежу
Semen Рівень 21
17 червня 2025
Не зовсім так.В get_grade передається кожен елемент списку, тобто кортеж, і для порівняння get_grade повертає другий елемент цього кортежу.
Nikolay Рівень 11
10 листопада 2025
також поки не зрозуміло чому передається парметр (student) якого ніде в коді нема. наш список має назву "students", як компілятор взагалі розуміє звітки той student взявся?