Кто-нибудь может объяснить это количество слов, пожалуйста? - PullRequest
2 голосов
/ 05 мая 2020

Я прохожу курс алгоритма MIT DS&A и по проблеме расстояния до документа мы должны разобрать файл на список слов, а затем подсчитать частоту каждого слова в файле. Мне трудно понять следующую функцию:

def count_frequency(word_list):
    """
    Return a list giving pairs of form: (word,frequency)
    """
    L = []
    for new_word in word_list:
        for entry in L:
            if new_word == entry[0]:
                entry[1] = entry[1] + 1
                break
        else:
            L.append([new_word,1])
    return L
  1. Почему мы сравниваем новое_слово с записью [0]? а. Что делать, если L пусто? С чем мы сравниваем new_word? б. Почему мы специально сравниваем новое_слово с записью [0]? Почему бы нам не сделать что-нибудь вроде if new_word in L c. Почему нам нужно использовать break?
  2. Почему вкладка else block 1 находится справа от более раннего блока if? Когда я пытался сделать отступ в блоке else, появлялась ошибка отступа.

Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 05 мая 2020

Список L содержит двухэлементные записи из-за L.append([new_word,1]). Если L пусто, for не будет введено, поэтому нет проблем с entry[0].

entry[0] - это слово, а entry[1] - это счетчик. Вы не можете сказать if new_word in L, потому что это не просто список строк.

break останавливает for после того, как слово найдено.

for/else это вещь в Python. else запускается, если for завершается без прерывания (в данном случае break). Если new_word отсутствует в L, for не сломается, а новое слово и счетчик 1 добавляются к L.

FYI, встроенный collections.Counter() вернет аналогичные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...