You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python代码以获取文本中长度Top5的最长单词?

获取文本文件中长度排名前5的最长单词的解决方案

原代码仅能追踪单个最长单词,要实现Top5的需求,我们可以通过调整数据结构和逻辑来实现,以下是两种实用方案:

方案一:排序取前5(简单直观)

这种方法适合文件内容不大的场景,先收集所有单词,按长度降序排序后直接截取前5个:

# 打开文件并读取所有单词
with open("C:/Users/Dell/Desktop/Demo.TXT", mode="r", encoding="utf8") as f:
    words = f.read().split()

# 按单词长度降序排序,长度相同则保持原顺序
sorted_words = sorted(words, key=lambda x: len(x), reverse=True)

# 获取前5个最长单词
top5_longest = sorted_words[:5]

# 输出结果,同时显示每个单词的长度
for word in top5_longest:
    print(f"单词:{word},长度:{len(word)}")

说明:

  • 使用with语句打开文件,能自动处理文件关闭,避免资源泄漏
  • sorted函数的key参数指定按单词长度排序,reverse=True实现降序
  • 如果需要去重(避免相同单词重复出现在Top5里),可以先转换为集合再排序:words = list(set(words)),但会丢失原文件中的单词顺序

方案二:遍历中维护Top5列表(内存高效)

如果处理的是超大文件,一次性加载所有单词会占用过多内存,这种方法可以在遍历过程中只保留当前最长的5个单词:

import heapq

top5 = []

with open("C:/Users/Dell/Desktop/Demo.TXT", mode="r", encoding="utf8") as f:
    for line in f:
        # 按行分割单词,逐行处理
        words = line.split()
        for word in words:
            word_len = len(word)
            # 如果当前Top5不足5个,直接加入
            if len(top5) < 5:
                heapq.heappush(top5, (word_len, word))
            else:
                # 比较当前单词长度和堆中最短的单词长度
                min_len, min_word = top5[0]
                if word_len > min_len:
                    # 替换堆中最短的单词
                    heapq.heappop(top5)
                    heapq.heappush(top5, (word_len, word))

# 将堆中的元素按长度降序排列输出
top5_sorted = sorted(top5, key=lambda x: x[0], reverse=True)
for length, word in top5_sorted:
    print(f"单词:{word},长度:{length}")

说明:

  • 使用heapq模块实现小顶堆,堆顶始终是当前Top5中最短的单词,这样每次比较和替换的效率更高
  • 逐行读取文件,避免一次性加载全部内容,适合大文件处理
  • 最终需要再排序一次,因为堆的顺序是小顶堆,不是降序排列

内容的提问来源于stack exchange,提问作者raja Osama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:50:29