如何实现类似random.randint(i,j)的无重复全范围随机整数生成器?
实现指定范围内无重复随机顺序整数序列的方法
当然有办法实现这个需求——本质上就是对指定区间内的所有整数做随机排列,下面以Python为例给出两种简洁的实现方式:
方法1:利用random.shuffle()打乱列表
先创建包含区间所有整数的列表,再用shuffle()直接打乱顺序:
import random def get_shuffled_range(start, end): # 生成包含start到end所有整数的列表(range左闭右开,所以end+1) num_list = list(range(start, end + 1)) # 原地打乱列表顺序 random.shuffle(num_list) return num_list # 示例调用,输出类似 [5, 3, 4, 2, 0, 1] print(get_shuffled_range(0, 6))
方法2:利用random.sample()直接抽样
sample()方法可以从序列中无重复抽取指定数量的元素,当抽取数量等于序列总长度时,就等价于随机排列:
import random def get_shuffled_range(start, end): total = end - start + 1 # 从range中抽取全部元素,返回随机排列的列表 return random.sample(range(start, end + 1), k=total) # 示例调用 print(get_shuffled_range(0, 6))
这两种方法都能满足你的要求:返回指定范围内的所有整数,无重复且顺序随机。如果需要逐个获取这些随机整数,也可以遍历返回的列表,每次取一个元素。
内容的提问来源于stack exchange,提问作者T. F. S. de Andrade
相关产品推荐
相关产品推荐

