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}]
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ