Сортировка списков списков по индексу с Python: пример кода

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

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

Список списков в Python можно упорядочить по элементу, расположенному под определённым индексом, при помощи функции sorted(), ключ которой задаётся с использованием лямбда-выражения:

Python
Скопировать код
# Производим сортировку по второму элементу каждого подсписка (индекс 1, учтите, что индексация начинается с 0)
sorted_list = sorted([[2, 9], [1, 5], [4, 1]], key=lambda x: x[1])

В результате сортировка будет проведена с учётом второго элемента в подсписках.

Кинга Идем в IT: пошаговый план для смены профессии

Подробный анализ и решение

Функция sorted() в сочетании с параметром key допускает гибкое определение критерия сортировки в Python, что актуально при работе с вложенными структурами данных, такими как списки. Лямбда-выражения в этом контексте проявляют свое полезное свойство:

Python
Скопировать код
# Упорядочиваем сохраненные списки по третьему элементу каждого подсписка (индекс 2)
sorted_list = sorted([[2, 'apple', 'Fiction'], [1, 'banana', 'Biography'], [4, 'grape', 'Science']], key=lambda x: x[2])

Если обрабатываются крупные наборы данных и требуется оптимизация производительности, следует применять operator.itemgetter:

Python
Скопировать код
from operator import itemgetter

# Повышаем производительность сортировки с помощью функции itemgetter
sorted_list = sorted([[2, 'apple', 'Fiction'], [1, 'banana', 'Biography'], [4, 'grape', 'Science']], key=itemgetter(2))

Как выбрать: lambda или itemgetter?

Эффективность и производительность

Функция itemgetter выполняется быстрее, так как она реализована на Си и оптимизирована для операций индексации.

Сложная логика сортировки

Лямбда-выражения подходят для особых случаев сортировки по нескольким критериям или с применением нестандартной логики:

Python
Скопировать код
# Упорядочиваем по жанру, фрукту и числу – идеально для фруктоведов и книголюбов
sorted_list = sorted(list_of_lists, key=lambda x: (x[2], x[1], x[0]))

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

Python
Скопировать код
sorted_list = sorted(list_of_lists, key=itemgetter(2, 1, 0))

Читаемость кода

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

Разработка различных сценариев: сортировка строк, чисел и сортировка на месте

Сортировка чисел

Python осуществляет сортировку чисел по возрастанию:

Python
Скопировать код
# Упорядочиваем по первому числовому элементу
sorted_list = sorted([[10, 'apple'], [7, 'banana'], [30, 'grape']], key=itemgetter(0))

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

Строки сортируются в алфавитном порядке:

Python
Скопировать код
# Применяем сортировку к строкам 
sorted_list = sorted([['fiction', 'apple'], ['biography', 'banana'], ['science', 'grape']], key=itemgetter(0))

Модификация исходного списка

Для изменения порядка следования элементов в исходном списке можно воспользоваться методом list.sort():

Python
Скопировать код
# Модифицируем исходный список, упорядочивая его на месте
original_list = [[2, 'apple'], [1, 'banana'], [4, 'grape']]
original_list.sort(key=itemgetter(1))

Визуализация

Представьте список списков как книжную полку с книгами разных жанров:

Markdown
Скопировать код
На полке:
- Книга 1: [🔢, 🍎, "Fiction"]
- Книга 2: [✏️, 🍌, "Biography"]
- Книга 3: [🧮, 🍇, "Science"]

После сортировки по фруктам полка выглядит следующим образом:

Markdown
Скопировать код
Книги на полке, отсортированные по категории Index-1 (Фрукты):
- Книга 2: [✏️, 🍌, "Biography"]
- Книга 1: [🔢, 🍎, "Fiction"]
- Книга 3: [🧮, 🍇, "Science"]

Дополнительные соображения

Устойчивая сортировка

Python при сортировке сохраняет первоначальное взаимное расположение элементов, если их значения равны. Это важно учитывать при многоуровневой сортировке.

Изменяемые типы данных и сортировка

Если в списках есть изменяемые объекты, то лямбда-выражения предоставляют возможность реализации сложной логики сортировки.

Полезные материалы

  1. Встроенные функции — документация Python 3.12.2 — для освоения базовых инструментов языка.
  2. Lambda-выражения — документация Python 3.12.2 — подробности о лямбда-выражениях.
  3. Как сортировать — документация Python 3.12.2 — расширение навыков сортировки.
  4. operator — применение операторов как функций — документация Python 3.12.2 — для глубокого осмысления использования itemgetter.
  5. Как отсортировать список списков по определённому индексу внутреннего списка? – Stack Overflow — профессиональное обсуждение задачи сортировки.
  6. Использование sorted() и sort() в Python – Real Python — глубинное изучение темы сортировки данных.