📜  门| GATE-CS-2014-(Set-3) |问题 20(1)

📅  最后修改于: 2023-12-03 15:12:42.376000             🧑  作者: Mango

问题20:在一个文本文件中,每一行都包含一些字符串。写一个程序,可以读取该文件并统计每个字符串在文件中出现的次数。然后,以出现次数的降序输出所有字符串。

这是一道典型的算法题目,需要使用哈希表来记录每一个字符串出现的频次。在我们开始编写程序之前,我们需要进行的准备工作如下:

  • 确认文件路径
  • 打开文件并逐行读取
  • 将每个字符串记录到哈希表

接下来是程序的具体实现:

import collections

# 读取文件并返回所有的字符串
def read_file(file_path):
    with open(file_path, 'r') as f:
        lines = f.readlines()
        words = []
        for line in lines:
            # 移除行末的换行符
            line = line.rstrip()
            # 使用空格分割每一行
            line_words = line.split(' ')
            # 添加到单词列表
            words.extend(line_words)
        return words

# 统计单词出现频次
def count_words(words):
    counter = collections.Counter(words)
    return counter

# 打印出现频次最高的10个单词
def print_top_10_words(counter):
    # 将结果按出现频次降序排序
    sorted_words = sorted(counter.items(), key=lambda x: x[1], reverse=True)
    # 打印最高的10个单词
    for word, count in sorted_words[:10]:
        print(f'{word}: {count}')

# 主函数
def main():
    file_path = 'path/to/file.txt'
    words = read_file(file_path)
    counter = count_words(words)
    print_top_10_words(counter)

if __name__ == '__main__':
    main()

上述代码中,我们使用了 collections 模块中的 Counter 类来完成字符串的频次计数,这个类可以直接对列表、字符串等序列进行计数,非常方便。我们还定义了三个函数 read_filecount_wordsprint_top_10_words,分别用于读取文件,统计单词出现频次以及输出出现频次最高的前10个单词。最后在 main 函数中调用这些函数就可以实现相应的功能。

需要注意的是,程序中的 file_path 需要根据具体情况修改为实际的文件路径。此外,在输出结果时也可以根据需求进行相应的调整,比如改为输出前20个单词等等。