Python 生成一定范围内不重复随机数


随机数 Python set


文章目录

  • Python 生成一定范围内不重复随机数
  • 生成一定范围内随机数
  • 两种方法:
  • 一、利用set()特性去重
  • set为何是天生去重的?
  • 二、调用random.sample()
  • 总结



生成一定范围内随机数

两种方法:

一、利用set()特性去重

import random

def getNumList(start, end, n):
    """生成n个 [ start, end ] 区间内的不重复随机数"""  # 函数注释
    numsArray = set()
    while len(numsArray) < n:
        numsArray.add(random.randint(start, end))
        
    return list(numsArray)

set为何是天生去重的?

因为每存一个值到set里时, 都要先经过hash,然后通过得出的这个hash值算出应该存在set里的哪个位置,存的时候会先检查那个位置上有没有值 ,有的话就对比是否相等,如果相等,则不再存储此值。 如果不相等(即为空),则把新值 存在这。

二、调用random.sample()

import random

def getnums(start, end, n):
  """生成n个 [ start, end ] 区间内的不重复随机数"""  # 函数注释
  return random.sample([i for i in range(start, end+1)], n)

总结

区间长度过大时建议使用第一种方法,因为第二种方法会占用较多内存。而且第一种方法效率不比第二种差。