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

Python统计报告指定词时硬编码列表比读文件快的原因及解决方法

速度差异原因

两段代码的性能差距本质不是「从文件读词表」本身带来的,核心问题是两种实现中存储目标词的数据结构完全不同:

  • 第一种代码里的create = {'agile', 'skills'}是集合(set)类型,Python中集合的成员查询token in create的时间复杂度是O(1),无论词表长度多大,单次查询的耗时几乎恒定。
  • 第二种代码里的create = open(...).read().splitlines()是列表(list)类型,列表的成员查询需要从头遍历所有元素逐一比对,时间复杂度是O(n),n为词表长度。你实际使用的词表长度很大,再加上需要对每个文档的所有token都做查询操作,累计的耗时就会被放大很多倍,最终表现出明显的速度差异。

还有一个容易被忽略的小影响因素:如果文件中读取的词没有统一转小写、没有去除首尾空白,会导致部分匹配失败,但不会影响运行速度,只会影响统计结果准确性。

解决方法

只需要把从文件读取到的词表转成集合类型即可,改完后第二种实现的性能会和第一种完全一致,优化后的代码如下:

# 替换原create赋值逻辑,推荐用with上下文管理器避免文件句柄泄漏
with open('C:/Users/s170760/Desktop/Create.txt', 'r', encoding='UTF-8') as f:
    # 逐行读取词,去除首尾空白、统一转小写后存入集合
    create = set(word.strip().lower() for word in f)

额外优化建议:

  • 给open方法指定encoding参数,避免不同系统默认编码不一致导致读取乱码
  • 对读取到的每个词做strip()处理,去掉首尾可能存在的空格、换行符等无效字符
  • 统一转小写,和后续文档处理的doc.lower()逻辑对齐,避免大小写差异导致的漏匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:39:02