Сортировка списков списков по индексу с Python: пример кода
Быстрый ответ
Список списков в Python можно упорядочить по элементу, расположенному под определённым индексом, при помощи функции sorted()
, ключ которой задаётся с использованием лямбда-выражения:
# Производим сортировку по второму элементу каждого подсписка (индекс 1, учтите, что индексация начинается с 0)
sorted_list = sorted([[2, 9], [1, 5], [4, 1]], key=lambda x: x[1])
В результате сортировка будет проведена с учётом второго элемента в подсписках.
Подробный анализ и решение
Функция sorted()
в сочетании с параметром key
допускает гибкое определение критерия сортировки в Python, что актуально при работе с вложенными структурами данных, такими как списки. Лямбда-выражения в этом контексте проявляют свое полезное свойство:
# Упорядочиваем сохраненные списки по третьему элементу каждого подсписка (индекс 2)
sorted_list = sorted([[2, 'apple', 'Fiction'], [1, 'banana', 'Biography'], [4, 'grape', 'Science']], key=lambda x: x[2])
Если обрабатываются крупные наборы данных и требуется оптимизация производительности, следует применять operator.itemgetter
:
from operator import itemgetter
# Повышаем производительность сортировки с помощью функции itemgetter
sorted_list = sorted([[2, 'apple', 'Fiction'], [1, 'banana', 'Biography'], [4, 'grape', 'Science']], key=itemgetter(2))
Как выбрать: lambda или itemgetter?
Эффективность и производительность
Функция itemgetter
выполняется быстрее, так как она реализована на Си и оптимизирована для операций индексации.
Сложная логика сортировки
Лямбда-выражения подходят для особых случаев сортировки по нескольким критериям или с применением нестандартной логики:
# Упорядочиваем по жанру, фрукту и числу – идеально для фруктоведов и книголюбов
sorted_list = sorted(list_of_lists, key=lambda x: (x[2], x[1], x[0]))
Для сортировки по нескольким индексам без сложной логики лучше использовать itemgetter
:
sorted_list = sorted(list_of_lists, key=itemgetter(2, 1, 0))
Читаемость кода
Выбор между лямбда-выражениями и функцией itemgetter
следует делать, исходя из читаемости и соответствия сложности задачи.
Разработка различных сценариев: сортировка строк, чисел и сортировка на месте
Сортировка чисел
Python осуществляет сортировку чисел по возрастанию:
# Упорядочиваем по первому числовому элементу
sorted_list = sorted([[10, 'apple'], [7, 'banana'], [30, 'grape']], key=itemgetter(0))
Сортировка строк
Строки сортируются в алфавитном порядке:
# Применяем сортировку к строкам
sorted_list = sorted([['fiction', 'apple'], ['biography', 'banana'], ['science', 'grape']], key=itemgetter(0))
Модификация исходного списка
Для изменения порядка следования элементов в исходном списке можно воспользоваться методом list.sort()
:
# Модифицируем исходный список, упорядочивая его на месте
original_list = [[2, 'apple'], [1, 'banana'], [4, 'grape']]
original_list.sort(key=itemgetter(1))
Визуализация
Представьте список списков как книжную полку с книгами разных жанров:
На полке:
- Книга 1: [🔢, 🍎, "Fiction"]
- Книга 2: [✏️, 🍌, "Biography"]
- Книга 3: [🧮, 🍇, "Science"]
После сортировки по фруктам полка выглядит следующим образом:
Книги на полке, отсортированные по категории Index-1 (Фрукты):
- Книга 2: [✏️, 🍌, "Biography"]
- Книга 1: [🔢, 🍎, "Fiction"]
- Книга 3: [🧮, 🍇, "Science"]
Дополнительные соображения
Устойчивая сортировка
Python при сортировке сохраняет первоначальное взаимное расположение элементов, если их значения равны. Это важно учитывать при многоуровневой сортировке.
Изменяемые типы данных и сортировка
Если в списках есть изменяемые объекты, то лямбда-выражения предоставляют возможность реализации сложной логики сортировки.
Полезные материалы
- Встроенные функции — документация Python 3.12.2 — для освоения базовых инструментов языка.
- Lambda-выражения — документация Python 3.12.2 — подробности о лямбда-выражениях.
- Как сортировать — документация Python 3.12.2 — расширение навыков сортировки.
- operator — применение операторов как функций — документация Python 3.12.2 — для глубокого осмысления использования
itemgetter
. - Как отсортировать список списков по определённому индексу внутреннего списка? – Stack Overflow — профессиональное обсуждение задачи сортировки.
- Использование sorted() и sort() в Python – Real Python — глубинное изучение темы сортировки данных.