天天看点

Python 内置模块之 random

  十二、Python 内置模块之 random

  random 库是 Python 中生成随机数的标准库,包含的函数清单如下:

  基本随机函数:seed、random、getstate、setstate;

  扩展随机函数:randint、getrandbits、randrange、choice、shuffle、sample;

  分布随机函数:uniform、triangular、betavariate、expovariate、gammavariate、gauss、lognormvariate、normalvariate、vonmisesvariate、paretovariate、weibullvariate。

  发现单词 variate 出现频率比较高,该但是是变量的意思。

  12.1 基本随机函数

  12.1.1 seed 与 random 函数

  seed 函数初始化一个随机种子,默认是当前系统时间。

  random 函数 生成一个 [0.0,1.0) 之间的随机小数 。

  具体代码如下:

  import random

  random.seed(10)

  x = random.random()

  print(x)

  其中需要说明的是 random.seed 函数, 通过 seed 函数 可以每次生成相同的随机数,例如下述代码:

  y = random.random()

  print(y)

  在不同的代码上获取到的值是不同的,但是 x 与 y 是相同的。

  0.5714025946899135

  12.1.2 getstate() 和 setstate(state)

  getstate 函数用来记录随机数生成器的状态,setstate 函数用来将生成器恢复到上次记录的状态。

  # 记录生成器的状态

  state_tuple = random.getstate()

  for i in range(4):

  print(random.random())

  print("*"*10)

  # 传入参数后恢复之前状态

  random.setstate(state_tuple)

  for j in range(4):

  输出的随机数两次一致。

  0.10043296140791758

  0.6183668665504062

  0.6964328590693109

  0.6702494141830372

  **********

  12.2 扩展随机函数

  random 扩展随机函数有如下几个:

  `randint`、`getrandbits`、`randrange`、`choice`、`shuffle`、`sample`

  12.2.1 randint 和 randrange

  randint 生成一个 [x,y] 区间之内的整数。

  randrange 生成一个 [m,n) 区间之内以 k 为步长的随机整数。

  测试代码如下:

  x = random.randint(1,10)

  y = random.randrange(1,10,2)

  这两个函数比较简单,randint 函数原型如下:

  random.randint(start,stop)

  参数 start 表示最小值,参数 stop 表示最大值,两头都是闭区间,也就是 start 和 stop 都能被获取到。

  randrange 函数原型如下:

  random.randrange(start,stop,step)

  如果函数调用时只有一个参数,默认是从 0 到该参数值,该函数与 randint 区别在于,函数是左闭右开,最后一个参数是步长。

  查阅效果,可以复制下述代码运行:

  for i in range(3):

  print("*"*20)

  print(random.randrange(10))

  print(random.randrange(5,10))

  print(random.randrange(5,100,5))

  12.2.2 getrandbits(k) 和 choice(seq)

  getrandbits 生成一个 k 比特长的随机整数,实际输出的是 k 位二进制数转换成的十进制数。

  choice 从序列中随机选择一个元素。

  x = random.getrandbits(5)

  print(x)大连做人流多少钱 http://mobile.120wtrlyy.com/

  # 生成的长度是 00000-11111

  getrandbits(k) 函数可以简单描述如下:输出一个[0,2k−1] 范围内一个随机整数,k 表示的是 2 进制的位数。

  choice 就比较简单了,从列表中返回一个随机元素。

  my_list = ["a", "b", "c"]

  print(random.choice(my_list))

  12.2.3 shuffle(seq) 和 sample(pop,k)

  shuffle 函数用于将序列中的元素随机排序,并且原序列被修改。

  sample 函数用于从序列或者集合中随机选择 k 个选择,原序列不变。

  my_list = [1,2,3,4,5,6,7,8,9]

  random.shuffle(my_list)

  print(my_list)

  shuffle 函数只能用于可变序列,不可变序列(如元组)会出现错误。

  my_list = ["梦想", "橡皮擦", 1, 2, [3, 4]]

  ls = random.sample(my_list, 4)

  print(ls)

  12.3 分布随机函数

  该部分涉及的比较多,重点展示重要和常见的一些函数。

  12.3.1 uniform(a,b) 、betavariate 和 triangular 函数

  uniform 生成一个 [a,b] 之间的随机小数,采用等概率分布。

  betavariate 生成一个 [0,1] 之间的随机小数,采用 beta 分布。

  triangular 生成一个 [low,high] 之间的随机小数,采用三角分布。

  在使用 uniform 时候需要注意,如果 a

  print(random.uniform(4, 1))

  12.3.2 其它分布随机函数

  以下都是生成随机数的方法,只是底层核心算法不同。

  、、、、、、、。

  expovariate:生成一个 (0,∞) 之间的随机整数,指数分布;

  gammavariate:采用 gamma 分布;

  gauss:采用高斯(正太)分布;

  lognormvariate:对数正太分布;

  normalvariate:正太分布;

  vonmisesvariate:冯米赛斯分布;