Сортировка списков Python

Сортировка списков в Python

Сортировка данных — одна из самых распространённых задач при работе с Python. Например, вам может понадобиться отсортировать список участников команды по именам или список проектов по приоритету.

В этой статье описывается, как сортировать списки в Python .

Python sort() и sorted()

В 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 = [ "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]

Другим примером может быть использование аргумента key для сортировки сложного списка, например списка кортежей:

 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'} ]

Лучший и быстрый способ сортировки сложной функции — использовать функции модуля Operator . Вот пример:

 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() .

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

питон

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *