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

如何用Python的random.sample从范围中抽取排除指定值的样本?

解决方法

方法1:先构建排除后的候选集合再抽样

先把需要排除的元素转成集合(集合的成员检查效率远高于列表),过滤原群体后再抽样,逻辑直观且适用于大多数场景。

import random

exclude = {122, 506, 1100, 56, 76, 1301}  # 转集合提升检查速度
n = range(1, 1501)
# 过滤排除项,生成候选池
candidates = [num for num in n if num not in exclude]
# 从候选池中抽取500个样本
result = random.sample(candidates, 500)
print(result)

特点:逻辑清晰,一次过滤后直接完成抽样,候选池可复用;但原群体极大时,生成完整候选池会占用较多内存。

方法2:拒绝抽样(适合排除项较少的场景)

若排除元素数量少,无需提前生成完整候选池,通过循环随机生成元素并跳过排除项,直到收集足够样本,能节省内存。

import random

exclude = {122, 506, 1100, 56, 76, 1301}
sample_size = 500
result = set()

while len(result) < sample_size:
    num = random.randint(1, 1500)
    if num not in exclude:
        result.add(num)

# 按需转成列表
result = list(result)
print(result)

特点:内存占用低,排除项越少效率越高;但排除项占比高时,循环次数会大幅增加,效率下降。

关键提示

务必将exclude转为集合(set),列表的in操作是O(n)时间复杂度,而集合是O(1),能大幅提升检查速度。

内容的提问来源于stack exchange,提问作者Rémi Gate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:35:19