如何确保Python random.choice选取多个元素时不返回重复项
问题根源
连续三次独立调用random.choice()属于有放回抽样,每次选择不会排除之前已经选中的元素,因此会出现重复值。另外原始代码中的字典定义存在语法错误:Python字典的键和值之间需要用冒号:分隔,而非等号=。
正确实现方式
使用random模块内置的random.sample()方法即可,该方法会对序列做无放回随机抽样,直接返回指定数量的互不重复的元素,代码如下:
import random # 修正语法错误后的字典 categories = { "fruits": ['banana', 'apple', 'strawberry', 'grape', 'watermelon', 'mango'], "countries": ['Canada', 'Brazil', 'Ghana', 'Cuba', 'Japan', 'Germany', 'France'], "colors": ['green', 'brown', 'pink', 'yellow', 'red', 'grey', 'blue'] } category = random.choice(list(categories.keys())) print(category) # 无放回抽取3个不重复元素 words = random.sample(categories[category], k=3) print(words)
注意事项
- 使用
random.sample(population, k=n)时,要求抽样数量n不能大于原序列population的总长度,否则会抛出ValueError。当前每个分类下的元素数量都大于3,不存在这个问题。 - 如果需要先打乱列表再取前3个元素,也可以用
random.shuffle()先打乱原列表的副本再切片,但random.sample()实现效率更高,是更优选择。
内容的提问来源于stack exchange,提问作者arisctin
相关产品推荐
相关产品推荐

