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

Python词频统计代码小样本正常 大数据量运行无结果问题咨询

运行超时原因

你写的代码时间复杂度过高,是大数据量下无法跑完的核心问题:

  • 代码整体时间复杂度为O(n²):你嵌套了两层循环,同时内层循环中调用的words.count(x)本身也要遍历整个words列表计算频次,相当于每统计一个单词就要遍历全列表n次,10万条数据对应要执行100亿次操作,70万条更是要执行4900亿次操作,运行超过24小时是正常的。
  • 冗余逻辑进一步拖慢速度:内层for j in range(i,len(words))循环完全是无效操作,每次循环都重复给变量c赋相同的值,平白多执行了n次空循环。
  • 额外查询开销:判断x not in d1.keys()在部分旧版Python中也是O(n)级别的操作,又额外增加了运行耗时。

优化解决方案

方案1:使用Python内置collections.Counter(最推荐,性能最优)

Python官方自带的频次统计工具,底层做了C级优化,时间复杂度仅为O(n),处理百万级数据秒出结果:

from collections import Counter

# 一步完成所有单词的频次统计
word_counter = Counter(words)
# 输出出现频次最高的前N个单词,比如取前23个和你之前的测试输出对应
top_words = word_counter.most_common(23)
print(top_words)
# 如果需要返回字典格式,直接调用dict(word_counter)即可

方案2:手动实现高效统计逻辑(不想依赖内置库的场景)

仅遍历一次单词列表即可完成统计,没有嵌套循环,时间复杂度同样为O(n):

d1 = {}
for word in words:
    if word in d1:
        d1[word] += 1
    else:
        d1[word] = 1
# 按频次从高到低排序取前23个
top_words = sorted(d1.items(), key=lambda x: x[1], reverse=True)[:23]
print(top_words)

以上两种方案处理10万条数据仅需几毫秒,70万条数据也能在1秒内跑完。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:03