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

如何生成1的数量呈均匀分布的Python随机二进制列表?

实现1的数量均匀分布的随机二进制列表

原来的代码之所以呈现钟形(二项)分布,是因为每个元素独立生成0/1,这本质上是重复n次伯努利试验,结果自然是二项分布——中间的k值(1的数量)概率最高,两端最低。要让每个k的出现概率一致,我们可以换个思路:

  • 第一步:均匀随机选择1的数量k,k的取值范围是0到n(包含两端),每个k被选中的概率相等
  • 第二步:在n个位置里随机挑选k个位置设为1,剩下的位置设为0,这样每个包含恰好k个1的二进制列表都是等概率生成的,不会破坏随机性

具体实现代码

import random

def rand_binary_list_uniform(n):
    # 均匀选择1的数量k
    k = random.randint(0, n)
    # 生成包含k个1和n-k个0的列表,再随机打乱
    binary_list = [1]*k + [0]*(n - k)
    random.shuffle(binary_list)
    return binary_list

验证分布是否均匀

我们用和你类似的统计代码来验证效果:

counts = {i:0 for i in range(11)}
for _ in range(10000):
    lst = rand_binary_list_uniform(10)
    k = sum(lst)
    counts[k] += 1

# 打印统计结果
for k in counts:
    print(f"1的数量为{k}: {counts[k]}次")

运行后你会看到每个k对应的计数都接近900-1000左右(10000次试验,11个可能的k值,平均每个约909次),比如可能得到类似这样的结果:

1的数量为0: 921次
1的数量为1: 895次
1的数量为2: 910次
1的数量为3: 902次
1的数量为4: 915次
1的数量为5: 887次
1的数量为6: 908次
1的数量为7: 923次
1的数量为8: 901次
1的数量为9: 917次
1的数量为10: 921次

这样就实现了你要的1的数量均匀分布,同时每个符合条件的二进制序列都是随机生成的,完全保留了随机性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:25