Выбор коллекции под задачу
Содержание курса
Конкретные примеры: один сценарий — одна коллекция
Четыре сценария становятся понятнее, когда за каждым стоит реальная задача. Разберём по одному примеру на каждый тип — и для каждого объясним, почему альтернатива проиграла бы.
Очередь задач → список
Представь список дел, которые нужно выполнить по порядку: сначала «написать письмо», потом «позвонить клиенту», потом «закрыть задачу».
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. Множество делает это автоматически — дублей просто не бывает. Порядок посещений при этом не важен: важно только «был» или «не был».
Каждый из четырёх примеров показывает одно и то же: коллекция выбирается под природу данных и характер доступа к ним. Когда соответствие точное, код становится короче и понятнее без дополнительных усилий.
