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

如何生成指定范围内不重复随机数并赋值给不同对象的对应变量

不重复随机数分配修复方案

核心逻辑是避免单次随机生成后不做校验直接分配,推荐两种成熟实现方案,按需选择即可:

方案1:洗牌法(推荐,分配数量接近范围大小时效率更高)

实现思路是先生成指定范围的所有整数,打乱顺序后直接取数,天然无重复:

  • 先构造指定范围[min, max]的全量整数池,总元素数为max - min + 1
  • 对整数池执行随机洗牌打乱顺序
  • 按需要分配的对象数量,从打乱后的池子里依次取前N个值分配即可
    示例代码(Python):
import random
min_val = 1
max_val = 100
assign_count = 20 # 待分配的对象总数,不得大于范围总元素数

# 生成全量整数池
num_pool = list(range(min_val, max_val + 1))
# 随机洗牌
random.shuffle(num_pool)
# 取对应数量的不重复随机数
unique_randoms = num_pool[:assign_count]

注意:分配的对象数量不能超过你指定范围的总元素数,否则不可能实现全不重复的要求

方案2:集合校验法(适合分配数量远小于范围大小的场景)

实现思路是用集合存已经生成的随机数,重复就重新生成:

  • 初始化空集合存储已生成的随机数
  • 每次生成新随机数后判断是否在集合中:不存在则存入集合,存在则重新生成
  • 直到集合大小等于需要分配的对象数量,即可取出分配
    示例代码(Python):
import random
min_val = 1
max_val = 100
assign_count = 20

unique_randoms = set()
while len(unique_randoms) < assign_count:
    current_num = random.randint(min_val, max_val)
    unique_randoms.add(current_num)
# 转列表后按顺序分配
unique_randoms = list(unique_randoms)

选型参考

  • 当分配数量占范围总元素数的比例超过20%时,优先用洗牌法,避免重复生成多次导致效率下降
  • 当分配数量占比极低时,用集合校验法内存占用更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:04