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

统计两个列表词频并输出为字典的代码问题求助

现有代码问题

  • 计数器位置错误:count变量定义在循环外层,统计完一个单词后不会重置,后续单词的统计值会累加之前的计数,最终结果完全不符合预期。
  • 变量命名违规:使用Python内置类型名dict作为自定义变量名,会覆盖内置的dict类,后续如果需要调用dict()方法时会触发异常。
  • 逻辑存在缺失:checklist中没有在文章列表里出现过的单词,不会被写入最终结果字典,无法完整输出所有checklist单词的统计值。
  • 时间效率低下:两层嵌套循环的实现时间复杂度为O(n*m)(n为checklist长度,m为文章单词列表长度),数据量较大时运行速度会非常慢。

修复&优化方案

基础修复版(保留原有实现逻辑)

仅修改原有代码的错误点,逻辑和最初的思路一致:

# 避免用内置名做变量名,改成语义化的命名
check_list = ["a", "b", "c", "d"]
article_words = ["a", "v", "c", "a", "d", "c"]
result = {}

for target_word in check_list:
    # 每次统计新单词前重置计数器
    count = 0
    for word in article_words:
        if target_word == word:
            count += 1
    # 无论是否匹配到都写入结果,保证checklist单词全覆盖
    result[target_word] = count

print(result)

高效优化版

用Python标准库collections.Counter先一次性统计文章所有单词的出现次数,再遍历checklist生成结果,时间复杂度降到O(n+m),代码更简洁高效:

from collections import Counter

check_list = ["a", "b", "c", "d"]
article_words = ["a", "v", "c", "a", "d", "c"]

# 一次性统计文章所有单词的出现频率
article_word_count = Counter(article_words)
# 用字典推导式生成结果,未匹配到的单词默认返回0
result = {word: article_word_count.get(word, 0) for word in check_list}

print(result)

两种实现的输出结果一致:{'a': 2, 'b': 0, 'c': 2, 'd': 1}


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:08