Поиск по сайту:
Как странно! О моей бедной жене я думаю часто, но не могу думать о ней долго (М. Пруст).

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

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

Сортировка данных – одна из самых распространенных задач при работе с 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']

 

Читать  Как создать сводную таблицу в Pandas Python

Сортировка с функцией

Аргумент 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)

 

Читать  Сравнение Django и SQLAlchemy

Функция 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().

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


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

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

**ссылки nofollow

Это может быть вам интересно


Рекомендуемое
Улучшения PHP 8 и новые функции Помимо JIT, мы можем…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: