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
相关产品推荐
相关产品推荐

