time.time() помогает измерять длительность, sleep() делает задержку.
collections содержит специализированные структуры данных.
OrderedDict сохраняет порядок и умеет move_to_end().
popitem(last=False) удаляет первый элемент OrderedDict, что удобно для очереди.
Кэш хранит результаты повторных операций, LRU удаляет давно не используемые записи.
@lru_cache кэширует вызовы функции по аргументам.
defaultdict создаёт значение по умолчанию при обращении к отсутствующему ключу.
Counter считает элементы и умеет most_common(), elements(), update(), subtract().
Топ-3 ошибки: использовать sleep() в измерении быстрых операций; забывать, что defaultdict добавляет ключ при чтении; ожидать от Counter вычитания отрицательные значения при операторе -.
Задание 1. Частотный анализ слов
Подсчитайте количество вхождений каждого слова, игнорируя регистр и символы . и ,.
text = "This is a test. This test is only a test."