Рубрики
Без рубрики

Как сортировать список кортежей? – Самый питонический путь!

Вы уже пытались сортировать список кортежей? И когда вы увидели результат, это было не совсем то, что вы ожидали? Ну, это случилось со мной, когда я пошел глубже в Python, и я полагаю, что это также случилось с вами, так как вы ищете решение. Для меня это показывает, что вы … Как сортировать список кортежей? – Самый питонический путь! Подробнее “

Автор оригинала: Lukas.

Вы уже пытались разобраться a Список кортежей ? И когда вы увидели результат, это было не совсем то, что вы ожидали? Ну, это случилось со мной, когда я пошел глубже в Python, и я полагаю, что это также случилось с вами, так как вы ищете решение. Для меня это показывает, что вы продвинутый программист Python!

Быстрый ответ

Используйте встроенный Python отсортировано () функция или позвонить методу Сортировать () В список вы хотите сортировать. У них обои имеют необязательный параметр ключ это ожидает, что Функция Отказ Передайте функцию здесь, которая вычисляет значение ключа от каждого кортежа в Список сортировать кортежи по их вычисленным значениям ключа. Пример сортировки списка кортежей по их второй записи:

lst = [(1, 2), (2, 3), (0, 3)]
lst.sort(key=lambda x: x[1])

Упражнение : Добавить Распечатать() Заявление и распечатать состояние исходного списка лишенство .

Как сортировать список кортежей по любому элементу или пользовательской ценности?

Давайте сначала приспособим нашу проблему более подробно: у нас есть список кортежей, которые мы хотим отсортировать по второму элементу или сумма элементов или чего-либо еще, что это не первый элемент списка. Поведение по умолчанию обоих Сортировать () и отсортировано () состоит в том, чтобы использовать первую запись каждого кортежа в качестве критерия сортировки. Это то, что может привести к сюрпризаю для начинающие Отказ

Предположим, мы хотим сортировать список предметов, таких как этот:

items = [
   ("apple", 1.5),
   ("pear", 2.3),
   ("egg", 0.5),
   ("cherry", 0.2),
]

Мы могли бы либо сортировать кортежи по их первому элементу, что является именем или их вторым элементом, цена товара. Для достижения этого мы могли бы написать пользовательскую функцию сортировки. Но это не было бы очень питон.

Вместо этого мы хотим использовать встроенные функции, которые Python предоставляет. Поэтому мы должны варианты:

  1. Позвоните Сортировать () В списке через items.sort ()
  2. использовать отсортировано () Чтобы сортировать список через SORTED_ITEMS (предметы)

Разница между двумя вариантами заключается в том, что первый сортирует список на месте, а второй создает новый экземпляр списка и добавляет отсортированные элементы на этот новый экземпляр. Таким образом, в обоих случаях вы в конечном итоге с отсортированным списком. Если вам нужно сохранить первоначальное состояние списка, используйте отсортировано () В любом другом случае вы должны предпочесть призвать Сортировать () напрямую в списке. В обоих случаях список будет отсортирован по умолчанию Python: первая запись каждой кортежи.

Чтобы переопределить поведение по умолчанию, мы используем дополнительный ключ параметра, который предоставляется как Сортировать () и отсортировано () Отказ Параметр ключ ожидает функции, которая может вычислить значение из кортежа. Очень распространено использование лямбда для переопределения поведения по умолчанию. Если вы еще не знакомы с Python Lambda, прочитайте все фоновые знания в этом Статья Отказ

Чтобы сортировать элементы списка по второй записи кортежей, мы пишем:

items.sort(key=lambda x: x[1])

или если вы хотите сохранить начальный порядок предметов:

new_list = sorted(items, key=lambda x: x[1])

Наша ключевая функция принимает кортеж х И возвращает вторую запись, таким образом, окончательное упорядочение списка примет во внимание только вторую запись в каждой второй записи TUPLE. Мы могли бы также написать:

items.sort(key=lambda x: sum(x))

сортировать кортежи по сумме их записей. Конечно, это не применимо для нашего примера, поскольку записи наших кортежей являются строки и целые числа.

Наконец, важно знать о поведении по умолчанию Python для сортировки списков кортежей. Это не имеет смысла писать:

items.sort(key=lambda x: x[0])

Потому что это только то, что делает поведение по умолчанию.

Суммировать все это, посмотреть это видео:

Заключение

Python предоставляет всему вам нужно сортировать списки кортежей легко без написания пользовательских функций сортировки. Все, что вам нужно сделать, это определить функцию ключа, которая вычисляет значение для каждого кортежа, по которому они должны быть отсортированы.

Оригинал: “https://blog.finxter.com/how-to-sort-a-list-of-tuples-most-pythonic-way/”