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

如何从0-30的列表中无放回均匀随机抽取m个元素?

无放回均匀抽取整数样本的实现方案

你用random.uniform()的思路不对,这个函数的作用是生成指定区间内的浮点型随机数,完全不匹配你从整数序列里无放回抽样的需求。下面给你两种直接可行的方法:

方法一:使用random.sample()(推荐)

这是Python标准库专门为无放回抽样设计的方法,默认就是均匀分布,用法简单高效:

import random

arr = range(0, 30)
m = 5  # 替换成你需要抽取的样本数量
sample_result = random.sample(arr, m)
print(sample_result)

random.sample(population, k)会从population中随机选出k个不重复的元素,每个元素被选中的概率均等,完美符合你的要求。而且它不需要把整个range转成列表,对内存更友好。

方法二:先打乱序列再截取前m个

如果需要先打乱整个序列再取样本,可以用random.shuffle(),但注意range是不可变对象,需要先转成列表:

import random

arr = list(range(0, 30))
m = 5
random.shuffle(arr)
sample_result = arr[:m]
print(sample_result)

这种方法的效果和random.sample()一致,但如果你的序列非常大,shuffle会占用更多内存(因为要处理整个列表),所以优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:50:28