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

如何实现random.choice()限制样本最多被选中2次?

解决随机选择中每个样本最多被选中2次的问题

问题分析

原代码的核心问题在于:每次循环先一次性抽取num个样本,再检查累计次数是否超过2。这就导致如果某个样本之前已经被选中1次,在本次抽取中可能被选中2次,最终累计达到3次,违反了最多2次的限制。

修正后的代码

import collections
import random

# 初始化计数器,记录每个样本被选中的次数
counts = collections.Counter()
list_items = ['aa', 'bb', 'cc', 'dd', 'ee']
num_per_draw = 3  # 每次抽取的样本数量
total_draws = 3   # 总抽取次数

for _ in range(total_draws):
    current_draw = []
    for _ in range(num_per_draw):
        # 筛选出当前还能被选中的样本(累计次数<2)
        available_items = [item for item in list_items if counts[item] < 2]
        # 随机选择一个可用样本
        selected = random.choice(available_items)
        current_draw.append(selected)
        # 立即更新该样本的选中次数
        counts[selected] += 1
    print(f'本次抽取结果: {current_draw}')
    print(f'当前各样本累计选中次数: {dict(counts)}')

关键改进点

  • 逐次跟踪选中次数:不再等整轮抽取完成后再统计,而是每选中一个样本就立即更新计数器,确保后续选择不会违反次数限制。
  • 动态筛选可用样本:每次选择前只保留累计选中次数不足2次的样本,从根源上避免了超次数选择的可能。
  • 逻辑更严谨:即使在同一次抽取中,也不会重复选中已达1次的样本超过1次,保证最终每个样本的总选中次数不超过2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:25:38