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

Python加权随机单词选取及次数统计问题:返回值全为0

问题分析与修复

核心错误

代码返回全0的原因很明显:

  • weighted_choice函数最后返回的是counter,也就是每次选中单词后,在仅包含该单词的列表里统计的次数(永远是1)。
  • 主循环里把这个1添加到results列表,最后统计'green'、'eggs'、'ham'这些字符串的次数自然全是0——因为results里根本没有这些字符串,全是数字1。

修复后的代码

import random 
def weighted_choice(counts):
    word_list = []
    for key, n in counts.items():
        word_list.extend([key] * n)  # 简化循环添加的逻辑,效果和嵌套循环一致
    return random.choice(word_list)  # 直接返回选中的单词,而非无意义的统计次数

if __name__ == '__main__':
    results = []
    for i in range(600):
        item = weighted_choice({'green': 1, 'eggs': 3, 'ham':2})
        results.append(item)
    print(results.count('green'))  # 预期约100
    print(results.count('eggs'))   # 预期约300
    print(results.count('ham'))    # 预期约200

额外优化说明

  • 原代码用嵌套循环生成权重列表,改成word_list.extend([key] * n)更简洁高效,功能完全一致。
  • 避免用Python内置关键字list作为变量名,改成word_list防止语法冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:27:12