Коллекции

Выбор коллекции под задачу

Содержание курса

Конкретные примеры: один сценарий — одна коллекция

Четыре сценария становятся понятнее, когда за каждым стоит реальная задача. Разберём по одному примеру на каждый тип — и для каждого объясним, почему альтернатива проиграла бы.

Очередь задач → список

Представь список дел, которые нужно выполнить по порядку: сначала «написать письмо», потом «позвонить клиенту», потом «закрыть задачу».

tasks = ["написать письмо", "позвонить клиенту", "закрыть задачу"]
tasks.append("отправить отчёт")  # новая задача в конец
print(tasks[0])  # «написать письмо» — первой берём первую

Здесь важны и порядок, и возможность добавлять/удалять элементы. Кортеж не подойдёт — он неизменяем. Множество не подойдёт — оно не хранит порядок. Словарь избыточен: у задач нет именованных атрибутов, они просто идут в очереди.

Координата точки → кортеж

Координата точки на плоскости — это пара чисел, и эта пара не должна меняться: точка либо есть в этом месте, либо её нет.

point = (53.9, 27.5)  # широта и долгота Минска
print(point[0])  # 53.9

Если попытаться исправить координату, Python остановит программу с TypeError — и это правильно: координата не должна «случайно» измениться в середине вычислений. Список технически позволил бы это сделать, но тогда защиты не будет. Кортеж документирует намерение: эти данные фиксированы.

Телефонная книга → словарь

Тебе нужно найти номер конкретного человека. Никто не перебирает телефонную книгу с нулевого индекса — ты ищешь по имени.

contacts = {
    "Алиса": "+375291234567",
    "Борис": "+375447654321",
    "Вера": "+375251112233"
}
print(contacts["Борис"])  # +375447654321

Если хранить те же данные в списке — ["+375291234567", "+375447654321", "+375251112233"] — найти номер Бориса можно только если знать, что он второй. Стоит добавить нового контакта, и индексы сдвинутся. Словарь решает это раз и навсегда: доступ по имени, не по позиции.

Журнал посещённых страниц → множество

Пользователь открывает страницы в браузере, и некоторые — по несколько раз. Тебе нужен список уникальных страниц, которые он вообще видел.

visited = set()
visited.add("главная")
visited.add("каталог")
visited.add("главная")  # повторный визит — дубль игнорируется
visited.add("корзина")
print(visited)  # {'главная', 'каталог', 'корзина'}

Список здесь потребовал бы ручной проверки перед каждым добавлением: if page not in visited_list. Множество делает это автоматически — дублей просто не бывает. Порядок посещений при этом не важен: важно только «был» или «не был».

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

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.