Сортировка данных – одна из самых распространенных задач при работе с Python. Например, вы можете отсортировать список членов команды по имени или список проектов в порядке приоритета.
В этой статье описывается, как сортировать списки в Python.
Sort() и sorted() в Python
В Python вы можете отсортировать список, используя встроенный метод list.sort() или встроенную функцию sorted().
Функция sorted() создает новый отсортированный список, в то время как метод list.sort() сортирует список на месте. Если вы хотите сохранить, несортированный список использовать функцию sorted(). Другое отличие состоит в том, что функция sorted() работает с любым повторяемым объектом.
Синтаксис sort()и sorted()следующий:
list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)
Необязательные ключевые аргументы key и reverse имеют следующее значение:
- key – Функция, которая принимает один аргумент и преобразует его перед сравнением. Функция должна возвращать одно значение, которое используется для сравнения сортировки.
- reverse – Значение реверса может быть либо либо, True либо False. Значением по умолчанию является True. Когда для этого аргумента установлено значение false, список сортируется в обратном порядке.
Элементы списка сравниваются с помощью оператора < (меньше чем) и сортируются по возрастанию. Оператор < не поддерживает сравнения строки в целое число, так что если у вас есть список , содержащие строки и целые числа, то операция сортировки не удастся.
В следующем примере показано, как отсортировать список строк в алфавитном порядке:
directions = ["north", "east", "south", "west"] directions.sort() print('Sorted list:', directions)
Sorted list: ['east', 'north', 'south', 'west']
Если вы хотите сохранить исходный список без изменений, используйте функцию sorted():
directions = ["north", "east", "south", "west"] sorted_directions = sorted(directions) print('Sorted list:', sorted_directions)
Sorted list: ['east', 'north', 'south', 'west']
Чтобы отсортировать список в обратном (нисходящем) порядке, установите аргумент reverse в True:
directions = ["north", "east", "south", "west"] directions.sort(reverse=True) print('Sorted list:', directions)
Sorted list: ['west', 'south', 'north', 'east']
Сортировка с функцией
Аргумент key принимает функцию и позволяет выполнять более сложные операции сортировки.
Самый простой пример – сортировка элементов по длине:
directions = ["Destroyer", "Alex", "AndreyEx", "Max"] directions.sort(key=len) print('Sorted list:', directions)
Мы используем функцию len(), чтобы вернуть количество символов в строке, которая используется в качестве компаратора:
Sorted list: ['AndreyEx', 'Destroyer', 'Max', 'Alex']
Вы также можете создать пользовательскую функцию и использовать ее в качестве keyаргумента для сравнения. Вот пример, показывающий, как отсортировать список целых чисел по сумме их цифр:
def sum_digits(num): digits = [int(x) for x in str(num)] return sum(digits) numbers = [23, 77, 19, 310, 219] numbers.sort(reverse=True, key=sum_digits) print('Sorted list:', numbers)
Sorted list: [77, 219, 19, 23, 310]
Другим примером может быть использование ключевого аргумента для сортировки сложного списка, такого как список кортежей:
numbers = [(3, 14), (1, 61), (2, 71)] numbers.sort(key=lambda k: k[0]) print('Sorted list:', numbers)
Мы используем анонимную (лямбда) функцию, которая возвращает первый элемент кортежа. Список отсортирован по значению, возвращенному функцией:
Sorted list: [(1, 61), (2, 71), (3, 14)]
Тот же подход можно использовать для сортировки списка словарей:
elements = [ {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, {'name': 'Silver', 'number': 47, 'symbol': 'ag'}, {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, ] elements.sort(key=lambda k: k['name']) print('Sorted list:', elements)
Лямбда-функция возвращает значение nameключа, которое используется для сравнения:
Sorted list: [ {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, {'name': 'Silver', 'number': 47, 'symbol': 'ag'} ]
Лучший и более быстрый способ сортировки сложной функции – использовать функции модуля «Оператор». Вот пример:
from operator import itemgetter elements = [ {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}, {'name': 'Silver', 'number': 47, 'symbol': 'ag'}, {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, ] elements.sort(key=itemgetter('symbol')) print('Sorted list:', elements)
Функция itemgetter считывает значение ключа symbol:
Sorted list: [ {'name': 'Silver', 'number': 47, 'symbol': 'ag'}, {'name': 'Iron', 'number': 26, 'symbol': 'fe'}, {'name': 'Germanium', 'number': 25, 'symbol': 'ge'} ]
Вывод
Мы показали вам, как сортировать списки в Python, используя метод sort() и функцию sorted().
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.