有人可以解释一下这个词频计数吗?

Can someone explain this word frequency count, please?

我正在上 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. 为什么我们将 new_word 与条目 [0] 进行比较? 一个。如果 L 为空怎么办?我们将 new_word 与什么进行比较? b.为什么我们专门将 new_word 与 entry[0] 进行比较?为什么我们不做类似的事情 if new_word in L C。为什么我们需要使用break?
  2. 为什么 else 块 1 选项卡位于较早的 if 块的右侧?当我尝试缩进 else 块时,会出现缩进错误。

感谢您的帮助!

由于 L.append([new_word,1]),列表 L 包含两项条目。如果 L 为空,则不会输入 for,因此 entry[0].

没有问题

entry[0] 是一个词,entry[1] 是一个计数。你不能说 if new_word in L 因为它不仅仅是一个字符串列表。

break 在找到单词后停止 for

for/else 是 Python 中的一个东西。如果 for 没有中断地完成(在本例中为 break),则 else 运行。如果 new_word 不在 L 中,for 不会中断,新单词和计数 1 将添加到 L

仅供参考,内置 collections.Counter() 会 return 类似的结果。