Модуль 4 · Урок 15 із 58
Множини: membership, дедуплікація й порівняння
Set моделює унікальність і належність, а не позицію. Він корисний для allowed values, already-seen IDs і порівняння двох наборів. Якщо бізнесу важливий порядок або кількість повторів, перетворення в set може знищити потрібну інформацію.
Безпечна практика модуля 4
Пакет містить тільки synthetic records, pure collection functions, import-safe CLI і локальні tests. Жодних персональних чи production-даних, secrets, мережевих викликів або зовнішніх залежностей.
Set contract: distinct hashable elements
allowed = {"standard", "urgent", "review"}
route = "urgent"
if route not in allowed:
raise ValueError("unsupported route")Set не має index або slice. Його elements мають бути hashable; list, dict і mutable set не підходять. frozenset immutable і може бути element іншого set або dict key, якщо domain справді потребує composite unordered key.
Порожня множина — set(), не {}
seen_ids = set()
empty_mapping = {}
print(type(seen_ids).__name__) # set
print(type(empty_mapping).__name__) # dictЦя різниця проста, але failure проявляється пізніше, коли code викликає add на dict. Type assertion у маленькому negative case одразу показує проблему.
Dedup може бути lossy operation
ids = ["c2", "c1", "c2", "c3"]
unique_unordered = set(ids)
unique_in_order = list(dict.fromkeys(ids))Set прибирає duplicates, але не є контрактом стабільного presentation order. Якщо потрібен first-seen order, побудуйте його явно. Якщо треба знати частоту повторів, set взагалі недостатній — зберігайте counts або duplicate evidence окремо.
Set algebra робить reconciliation читабельною
expected = {"c1", "c2", "c3"}
observed = {"c2", "c3", "c4"}
missing = expected - observed
unexpected = observed - expected
matched = expected & observed
all_ids = expected | observedDifference має напрямок: expected - observed і observed - expected відповідають на різні питання. Symmetric difference ^ показує обидві сторони mismatch, але для звіту краще назвати missing і unexpected окремо.
Mutation під час iteration — сигнал змінити алгоритм
Не додавайте й не видаляйте elements того самого set під час iteration. Спершу обчисліть окремий result або ітеруйте snapshot. Методи add, update, discard мутують set; оператори |, &, - створюють новий result.
sorted, якщо потрібен детермінізм.Definition of Done
- Set використано лише там, де position і duplicate count не є даними.
- Порожній set створено через
set(). - Elements hashable, normalization відбулася до membership.
- Reconciliation називає direction difference.
- User-facing output має явний deterministic order.
Методичні джерела
Урок, сценарії, пояснення й вправи створені SEOWORK. Посилання ведуть лише на офіційну документацію Python.
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.