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

Python中random.choices权重相等元素数量不均,如何生成等数量随机列表?

如何生成元素出现次数完全相等的随机列表?

问题描述

我希望生成一个包含指定元素的随机列表,要求最终列表中每个元素的出现次数完全相同。尝试用random.choices设置相等权重,但结果次数不稳定,示例代码如下:

>>> set_sizes = [0, 3, 6, 12]
>>> target_list = random.choices(set_sizes, weights = [1, 1, 1, 1], k= 40)
>>> print (target_list.count(0), target_list.count(3), target_list.count(6), target_list.count(12))

8 10 12 10

原本期望每个元素出现10次,但实际结果波动较大,请问如何修改代码实现次数完全相等?

解决方案

random.choices是有放回抽样,即使权重相等,也无法保证每个元素的抽取次数严格一致。要实现次数完全相等,可采用「先构造固定次数的列表,再随机打乱」的思路:

  1. 计算每个元素需要重复的次数:总长度k除以元素数量,确保k能被元素个数整除(如示例中40÷4=10)。
  2. 构造基础列表,每个元素重复对应次数。
  3. 使用random.shuffle打乱列表顺序,得到随机且次数均等的结果。

代码示例:

import random

set_sizes = [0, 3, 6, 12]
total_length = 40
# 计算每个元素的出现次数
per_element_count = total_length // len(set_sizes)

# 生成包含指定次数元素的基础列表
result_list = []
for num in set_sizes:
    result_list += [num] * per_element_count

# 随机打乱列表顺序
random.shuffle(result_list)

# 验证次数(结果必为10 10 10 10)
print(result_list.count(0), result_list.count(3), result_list.count(6), result_list.count(12))

补充说明

如果总长度k无法被元素个数整除,可根据需求调整:要么调整k为可整除的数值,要么对部分元素多分配一次次数(需额外逻辑处理)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:09:59