Counter(iterable)Частотный словарь: считает появление значений.
Похоже наdict, но выражает намерение.Быстрая программа начинается не с модуля, а с операции: что нужно часто добавлять, считать, выбирать или искать?
Не заменяй понимание названиями модулей. Сначала назови инвариант и сложность, затем выбери deque, Counter, кучу или двоичный поиск.
Counter(iterable)Частотный словарь: считает появление значений.
Похоже наdict, но выражает намерение.deque()Очередь с быстрым appendleft и popleft.
defaultdict(list)Создает значение по умолчанию для нового ключа.
Удобно при группировке, но обычныйdict.get иногда проще.namedtuple / dataclassДают именованные поля записи.
Для учебной пары часто достаточно обычного кортежа.| Инструмент | Задача | Не использовать вместо |
|---|---|---|
itertools.combinations | Перебрать все пары или наборы малого размера. | Линейного алгоритма на больших данных. |
functools.lru_cache | Запомнить результаты чистой рекурсивной функции. | Объяснения рекурсии, если кеш скрывает важное состояние. |
heapq | Многократно брать минимум или хранить top-k. | Полной сортировки, если нужен весь порядок один раз. |
bisect | Найти позицию в уже отсортированном списке. | Поиска в неотсортированных данных. |
heapq гарантирует минимум в позиции 0. Остальной список не отсортирован полностью: не обращайся с кучей как с готовым отсортированным массивом.
Если требуется только несколько максимальных значений, heapq.nlargest точно описывает задачу. Когда нужен полностью отсортированный результат, выбирай sorted.
import heapq 04Быстрая проверка
Какой контейнер уместнее для многократного извлечения элементов с начала очереди?