Сортировка данных — одна из самых распространенных задач при работе с Python. Например, вы можете отсортировать список членов команды по именам или список проектов в порядке приоритета.
В этой статье описывается, как сортировать списки в Python .
Содержание
Python sort()
и sorted()
В Python, вы можете сортировать список с помощью встроенного в list.sort()
метод или встроенный в sorted()
функцию.
Функция sorted()
создает новый отсортированный список, а метод list.sort()
сортирует список на месте. Если вы хотите сохранить, несортированный список используйте функцию sorted()
. Еще одно отличие состоит в том, что функция sorted sorted()
работает с любым итерируемым объектом.
Синтаксис sort()
и sorted()
следующий:
list.sort(key=function, reverse=Boolean)
sorted(iterable, key=function, reverse=Boolean)
Необязательные ключевые аргументы key
и reverse
имеют следующее значение:
key
— функция, которая принимает один аргумент и преобразует его перед сравнением. Функция должна возвращать одно значение, которое используется для сравнения сортировки.-
reverse
— значение 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 = ["Arya", "Daenerys", "Jon", "Brienne"]
directions.sort(key=len)
print('Sorted list:', directions)
Мы используем функцию len()
чтобы вернуть количество символов в строке, которая используется в качестве компаратора:
Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']
Вы также можете создать пользовательскую функцию и использовать ее в качестве 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()
.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.