Skip to main content

Solving and testing word frequency counting (part 39ef)

Updated 2 min readMarkdown

Разберём решение и сразу накроем его тестами — это хороший стиль работы с кодом.

Задача

Дан текст. Посчитать, сколько раз встречается каждое слово, и вывести слова по убыванию частоты.

Решение

from collections import Counter


def word_count(text: str) -> list[tuple[str, int]]:
    words = text.lower().split()
    return Counter(words).most_common()


print(word_count("a b a c b a"))

Как это работает

Текст разбивается на слова, Counter подсчитывает вхождения за линейное время, а most_common() сразу возвращает отсортированный список пар.

Пример работы

[('a', 3), ('b', 2), ('c', 1)]

Сложность

O(n) по времени по числу слов, O(k) по памяти по числу уникальных.

Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

Читайте также:

сколько · сразу · базовая · защищает · отсортированный · слова · минимум · python · текст · делает · подсчитывает · случаи · нескольких · правках · кодом · collections · вывести · работает · Counter · решение · разбивается · Проверка · числу · return · вхождения · каждое · убыванию

No comments yet. Be the first to comment.

More from this blog