Продвинутый синтаксис
Время: 5-10 мин
dict
set
collections.Counter
defaultdict
Словари (dict) и множества (set)
Тема: Удаление дубликатов, быстрый поиск O(1), подсчет частот и defaultdict
Множества обеспечивают мгновенный поиск элементов за O(1), а словари незаменимы для группировки данных по ключам и подсчёта частот.
1. Множества (set)
Множество — это неупорядоченная коллекция уникальных элементов. Поиск x in my_set выполняется мгновенно за $O(1)$ (в отличие от списка, где поиск за $O(N)$):
set(a)— удаление всех дубликатов из списка.A & B— пересечение (элементы, которые есть и в A, и в B).A | B— объединение (элементы из A или B).A - B— разность (элементы из A, которых нет в B).
Разновидности и прототипы задания на экзамене
1. Множества (set) и операции над ними
Удаление дубликатов
set(a), объединение |, пересечение &, разность -.2. Словари (dict) и подсчет частот
Подсчет повторений через
d.get(k, 0) + 1 или Counter.3. Группировка данных (Задание 26/27 ЕГЭ)
Группировка точек по рядам:
rows[r].append(col).Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: Множества и словари ===
from collections import defaultdict, Counter
# 1. Быстрое удаление дубликатов:
raw_list = [5, 2, 8, 2, 5, 1, 9, 8]
unique_sorted = sorted(set(raw_list))
print("Уникальные по возрастанию:", unique_sorted)
# 2. Группировка точек по рядам для Задания 26:
rows = defaultdict(list)
# Допустим, на вход подаются пары (ряд, место):
pairs = [(10, 5), (10, 8), (12, 1), (10, 6)]
for r, c in pairs:
rows[r].append(c)
for r in rows:
rows[r].sort()
print(f"Ряд {r}: места {rows[r]}")
# 3. Подсчет частот элементов через Counter:
counts = Counter("АБРАКАДАБРА")
print("Частоты букв:", counts)
print("Самая частая буква:", counts.most_common(1))
Типичные ошибки
✕ Не так
# ❌ Ошибка: Создание пустого множества через {}
s = {} # Это создаст пустой СЛОВАРЬ (dict), а не set!
✓ Так
# ✅ Правильно: Создавать пустое множество через set():
s = set()
ГРОБ
ЛОВУШКА: Попытка положить изменяемый список в set или ключ dict
my_set.add([1, 2]) вызовет TypeError: unhashable type: 'list'.
Как обойти
Превращайте списки в неизменяемые кортежи:
my_set.add(tuple([1, 2])).Лайфхаки на экзамене
- Поиск в
setработает в 100 000 раз быстрее, чем вlistна больших массивах! - Для безопасного извлечения из словаря используйте
d.get(key, 0)вместоd[key].