Python中random.choices返回列表致index参数不匹配问题如何修复?
问题修复方案
核心问题是random.choices()始终返回列表类型,哪怕只生成一个结果,也是包含单个元素的列表——这就是你两次代码报错的根源:
- 代码1返回的是列表,后续需要单个整数的场景自然报错;
- 代码2里
dice_roll是列表,而dice_num.index()要求传入单个字符串,类型不匹配导致报错。
最简单的修复方式(基于代码1优化)
直接取random.choices()返回列表的第一个元素,就能得到单个整数,无需转字符串绕弯:
import random def wizardSpeed(): dice_num = [1, 2, 3, 4, 5, 6] # 显式指定weights参数名,代码可读性更高 dice_roll = random.choices(dice_num, weights=[0.25, 0.45, 0.65, 0.85, 0.9, 0.85]) # 取列表第一个元素,得到单个整数值 return dice_roll[0]
也可以简化成一行赋值
如果觉得列表索引麻烦,也可以在赋值时直接取出元素:
import random def wizardSpeed(): dice_num = [1, 2, 3, 4, 5, 6] # 直接获取唯一选中的元素 dice_roll = random.choices(dice_num, weights=[0.25, 0.45, 0.65, 0.85, 0.9, 0.85])[0] return dice_roll
若坚持用代码2的字符串版本(不推荐)
只需要把传入index()的参数改成列表的第一个元素即可:
import random def wizardSpeed(): dice_num = ["1","2", "3", "4", "5", "6"] probability = [0.25, 0.45, 0.65, 0.85, 0.9, 0.85] dice_roll = random.choices(dice_num, probability) # 取列表第一个元素传入index() position = dice_num.index(dice_roll[0]) result = int(dice_num[position]) return result
不过这种方式多了字符串转整数的冗余步骤,直接用整数列表的方案更高效简洁。
内容的提问来源于stack exchange,提问作者Cat Wyn
相关产品推荐
相关产品推荐

