v1.0.0

Python с нуля для ЕГЭ · Сортировка и поиск в коллекции

Урок курсаPython 35 задачБесплатно

Сортировка и поиск в коллекции

Разберём линейный поиск, различие sorted и list.sort и выбор поля, по которому сравниваются записи.

Теория

Две сортировки отвечают разным потребностям

Разберём на примере
Сохраним исходные баллы
Список scores равен [7, 3, 9], но дальше нужен и исходный порядок.
  1. sorted(scores) создаёт новый список [3, 7, 9].
  2. Переменная scores по-прежнему хранит [7, 3, 9].
  3. scores.sort() изменил бы сам исходный список и вернул None.
scores = [7, 3, 9]ordered = sorted(scores)print(scores)print(ordered)
Проверьте себя
Как получить отсортированный список, не меняя исходный?
Передать исходную коллекцию функции sorted и сохранить возвращённый новый список.

Записям нужно назвать поле сравнения

Числа Python умеет сравнивать напрямую. У записи из нескольких полей нужно выбрать смысл сортировки. Параметр key получает функцию, которая для каждой записи возвращает сравниваемое значение.

tasks = [{"title": "Читать", "priority": 2}, {"title": "Практика", "priority": 1}]ordered = sorted(tasks, key=lambda task: task["priority"])print(ordered[0]["title"])

Сначала вопрос, потом инструмент

Как действовать
Выбираем поиск или сортировку
  1. Назовите результат. Нужна одна запись, все совпадения или новый порядок?
  2. Выберите признак. Какое поле проверяем или сравниваем?
  3. Решите судьбу исходника. Можно ли менять исходный список?
  4. Учтите отсутствие. Что программа сделает, если поиск ничего не найдёт?
Проверьте себя
Зачем после найденного единственного элемента может понадобиться break?
Он прекращает ненужный дальнейший просмотр списка.

Практика

Остановите поиск

Список id равен 3, 7, 9, 12. Сколько элементов проверит линейный поиск числа 9, если после совпадения выполняется break?

Подсказка
Считайте проверки слева направо вместе с найденной.
Решение

Поиск проверяет 3, затем 7 и затем 9; после третьей проверки цикл останавливается.

Сохраните исходный порядок

Какую функцию нужно вызвать для scores, чтобы получить новый отсортированный список и не менять scores?

Подсказка
В уроке сравниваются функция и метод.
Решение

Функция sorted(scores) возвращает новый список; исходный scores не меняется.

Не потеряйте результат метода

Что хранит result после result = values.sort()?

Подсказка
Метод меняет сам список и не возвращает его.
Решение

list.sort изменяет values на месте и возвращает None.

Выберите поле сортировки

Записи имеют поля title и priority. Какое поле должна возвращать key, чтобы меньший приоритет оказался раньше?

Подсказка
Сортировка сравнивает значения, возвращённые key.
Решение

Функция key должна вернуть task["priority"], тогда записи сравниваются по числовому приоритету.

Проверьте сортировку локально

Запустите sorted(["python", "код", "я"], key=len). Какое слово окажется первым?

Подсказка
key=len сравнивает длины строк.
Решение

У слова «я» длина 1 — это наименьшее значение key.

Итог

Теперь вы умеете находить запись и осознанно выбирать между новым отсортированным списком и изменением существующего.

Эти два действия скоро станут основой поиска дела по номеру и удобного вывода списка дел.

Прогресс

0 / 5
x

Вы ещё не решали задания