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

求助:Python文本词频统计程序出现TypeError及功能实现问题

问题解析与代码修正

错误原因

你碰到的TypeError: list indices must be integers or slices, not list是因为:

  1. 你把本该用来存单词频率的dict1定义成了列表([]),但列表只能用整数或者切片当索引,你却用分割行得到的列表x去访问它,这完全不符合列表的使用规则。
  2. 统计单词频率得用字典(键值对结构),字典可以用单词当键,对应存它的出现次数,而不是列表。

除此之外,你的代码还有两个逻辑漏洞:

  • 用split(' ')分割文本会留下换行产生的空字符串,应该用无参数的split(),它能自动处理所有空白字符(空格、换行、制表符等)。
  • 你直接拿整行分割后的列表x去判断是否在dict1里,这不对,得遍历x里的每个单词,逐个统计频率。

修正后的完整代码

# 提示输入文件名
fname = input("请输入文本文件名:")

# 初始化字典存单词频率,用with自动管理文件
word_counts = {}
with open(fname, 'r') as file:
    for line in file:
        # 转小写后分割单词,自动处理空白
        words = line.lower().split()
        for word in words:
            # 更新单词频率
            if word in word_counts:
                word_counts[word] += 1
            else:
                word_counts[word] = 1

# 找频率最高的单词
max_freq = max(word_counts.values())
max_word = next(word for word, count in word_counts.items() if count == max_freq)

# 找频率最低的单词
min_freq = min(word_counts.values())
min_word = next(word for word, count in word_counts.items() if count == min_freq)

# 输出结果
print(f"Max frequency: {max_word} {max_freq}")
print(f"Min frequency: {min_word} {min_freq}")

代码说明

  • 文件管理:with语句会在代码块结束后自动关闭文件,避免资源浪费。
  • 大小写统一:line.lower()把所有单词转成小写,确保"I"和"i"、"Do"和"do"被算作同一个单词。
  • 单词分割:无参数的split()会把任意数量的空白(包括换行)作为分隔符,不会产生空字符串。
  • 极值查找:用next()直接取第一个符合条件的单词,和你给出的预期结果一致。

测试结果

用你提供的测试文本运行,输出和预期完全一致:

Max frequency: i 5
Min frequency: you 1

内容的提问来源于stack exchange,提问作者joshki.03

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:25:18