Код БарсикОсновы Python
Основы Python›C18 · Теория

Теория · C18

Сортировка и множества

Разберись в теме, запусти пример и переходи к самостоятельным задачам.

РАЗБИРАЕМ ПО ШАГАМ

От идеи к работающему коду

Для каталога и таблицы рекордов нужны порядок и уникальность. Разберём sorted, ключ сортировки и set; отдельно договоримся, как обращаться с повторяющимися значениями.

Сразу к запуску примера ↓
Барсик сортирует карточки и собирает отдельный набор уникальных значений.
Барсик сортирует карточки и собирает отдельный набор уникальных значений.
  1. 1Правило сравнения
  2. 2Сортировка или уникальность
  3. 3Проверка повторов

1. Новый порядок через sorted

sorted возвращает новый отсортированный список, сохраняя исходный. Параметр reverse=True включает обратный порядок. list.sort() меняет исходный список и возвращает None.

Сравнивай однотипные значения: числа сортируются численно, строки — по правилам сравнения строк, а не по естественному русскому алфавиту с учётом всех языковых особенностей. Для учебных имён можно привести регистр к одному виду.

Python
scores = [12, 5, 20, 5]print(sorted(scores))print(sorted(scores, reverse=True))print(scores)

2. Сортировка записей по key

Словари нельзя просто отсортировать как числа. key указывает функцию, которая извлекает сравниваемое значение из каждой записи: например, score.

В примере именованная функция делает правило явным. Краткая запись lambda item: item["score"] выражает то же извлечение, но пока достаточно обычной def.

Python
players = [{"name": "Анна", "score": 8}, {"name": "Иван", "score": 12}]def get_score(player):    return player["score"]rating = sorted(players, key=get_score, reverse=True)for player in rating:    print(player["name"], player["score"])

3. Множество убирает повторы

set хранит уникальные элементы. У множества нет пользовательских индексов и гарантированного порядка обхода. Поэтому list(set(words)) не подходит, если нужно сохранить первое появление слова.

Для уникальности с исходным порядком используем два набора: список результата и множество уже встреченных значений. В результат добавляем только при первом появлении.

Python
words = ["кот", "код", "кот", "мир"]seen = set()unique = []for word in words:    if word not in seen:        unique.append(word)        seen.add(word)print(unique)

4. Повторы и ничья в рейтинге

sorted — стабильная сортировка: записи с одинаковым ключом сохраняют свой относительный порядок из исходного набора. Это можно использовать как явное правило ничьей.

«Два лучших результата» может означать две записи или два разных значения. Для двух записей берём [:2] после сортировки. Для двух разных чисел сначала убираем повторы. Условие задачи должно указывать нужный вариант.

Python
scores = [10, 10, 7, 3]print("Две записи:", sorted(scores, reverse=True)[:2])print("Два разных:", sorted(set(scores), reverse=True)[:2])

Где легко ошибиться

  • Ожидать сохранения порядка после set.
  • Присвоить result = items.sort() и получить None.
  • Удалить повторы там, где нужны две отдельные записи.
Проверь понимание: Всегда ли два лучших результата [10, 10, 7] равны [10, 7]?

Нет. Для двух записей это [10, 10]. [10, 7] получится только при требовании разных значений.

Уникальные отсортированные значения

Запусти пример. Затем измени код или входные данные и проверь, как меняется вывод.

Пример входных данных

Ввод не нужен

Ожидаемый вывод

[10, 20, 30]
main.pyPython · можно менять код

Подготавливаем редактор…

Загрузка Python…

Каждый ответ — с новой строки.

Твой вывод

Здесь появится результат запуска.

Дальше — самостоятельные задачи

  1. Удалить повторные слова с сохранением первого появления
  2. Отсортировать записи по выбранному полю
  3. Найти два лучших результата и объяснить правило для повторов