Выбор коллекции под задачу
Содержание курса
Сборка программы-классификатора
Пришло время собрать всё в одну программу. Принципы выбора мы уже разобрали — теперь задача другая: показать, как четыре структуры работают вместе, получая данные из одного источника.
Возьмём новый сквозной пример — данные о заказе в интернет-магазине. Один заказ содержит сразу все четыре типа данных:
- список товаров, который может меняться (добавить, убрать позицию);
- фиксированный номер и дату заказа, которые не должны меняться;
- информацию о покупателе с доступом по имени поля;
- набор применённых промокодов — каждый должен учитываться ровно один раз.
# Входные данные одного заказа
raw_items = ["ноутбук", "мышь", "кабель", "мышь"] # товары (с повтором)
raw_meta = ("ORD-20481", "2024-11-15") # номер и дата
raw_customer = [("name", "Алиса"), ("city", "Минск"), ("email", "alice@example.com")]
raw_promo_codes = ["SALE10", "WELCOME", "SALE10"] # промокоды (с повтором)
# Классификатор: каждый вид данных → своя структура
cart = list(raw_items) # список: порядок важен, можно менять
order_meta = tuple(raw_meta) # кортеж: фиксированные данные
customer = dict(raw_customer) # словарь: доступ по имени поля
used_promos = set(raw_promo_codes) # множество: каждый промокод — один раз
# Работаем с результатом
cart.append("чехол") # добавили товар в корзину
print("Корзина:", cart)
print("Заказ №", order_meta[0], "от", order_meta[1])
print("Покупатель:", customer["name"], ",", customer["city"])
print("Промокоды:", used_promos)
print("Количество уникальных промокодов:", len(used_promos))
Обратите внимание на то, что происходит с повторами: "мышь" встречается в raw_items дважды и остаётся в корзине дважды — потому что в заказе это реально два экземпляра товара. "SALE10" встречается дважды, но в used_promos попадает один раз — потому что промокод либо применён, либо нет. Одни и те же исходные данные с повторами ведут себя по-разному в зависимости от выбранной структуры.
После классификации можно добавить проверки:
print("Есть ноутбук в корзине:", "ноутбук" in cart)
print("Промокод WELCOME использован:", "WELCOME" in used_promos)
print("Есть поле email:", "email" in customer)
Заметьте: in для словаря проверяет ключи — "email" in customer не ищет значение, а проверяет, есть ли такое поле.
Эта программа — не просто сумма четырёх отдельных примеров из предыдущих секций. Ключевое здесь — одновременная работа структур: данные приходят вместе, классифицируются по сценарию и дальше обрабатываются каждая своими методами. Именно так выглядит реальный код: не «где-то список, где-то словарь», а осознанное распределение данных по структурам с первого шага.
В следующем уроке функции начнут принимать и возвращать коллекции — и тогда выбор правильной структуры войдёт в проектирование самого интерфейса функции, а не только её внутренней логики.
