天天看点

#抬抬小手学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

    。undefined发现单词

    variate

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

基本随机函数

seed 与 random 函数

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

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

具体代码如下:

import random

random.seed(10)

x = random.random()
print(x)           

复制

其中需要说明的是

random.seed

函数, 通过 seed 函数 可以每次生成相同的随机数,例如下述代码:

import random

random.seed(10)
x = random.random()
print(x)

random.seed(10)
y = random.random()
print(y)           

复制

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

0.5714025946899135
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):
    print(random.random())           

复制

输出的随机数两次一致。

0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372
**********
0.10043296140791758
0.6183668665504062
0.6964328590693109
0.6702494141830372           

复制

扩展随机函数

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

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

复制

randint 和 randrange

randint

生成一个

[x,y]

区间之内的整数。

randrange

生成一个

[m,n)

区间之内以

k

为步长的随机整数。

测试代码如下:

x = random.randint(1,10)
print(x)

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

复制

这两个函数比较简单,

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))           

复制

getrandbits(k) 和 choice(seq)

getrandbits

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

choice

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

x =  random.getrandbits(5)
print(x)
# 生成的长度是 00000-11111           

复制

getrandbits(k)

函数可以简单描述如下:输出一个 $[0,2^k-1]$ 范围内一个随机整数,

k

表示的是 2 进制的位数。

choice

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

import random

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

print(random.choice(my_list))           

复制

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]]
print(my_list)
ls = random.sample(my_list, 4)
print(ls)           

复制

分布随机函数

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

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

uniform

生成一个

[a,b]

之间的随机小数,采用等概率分布。

betavariate

生成一个

[0,1]

之间的随机小数,采用

beta

分布。

triangular

生成一个

[low,high]

之间的随机小数,采用三角分布。

在使用

uniform

时候需要注意,如果 a<b,那么生成一个 b-a 之间的小数。

for i in range(3):
    print(random.uniform(4, 1))           

复制

其它分布随机函数

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

、、、、、、、。

  1. expovariate

    :生成一个

    (0,∞)

    之间的随机整数,指数分布;
  2. gammavariate

    :采用 gamma 分布;
  3. gauss

    :采用高斯(正太)分布;
  4. lognormvariate

    :对数正太分布;
  5. normalvariate

    :正太分布;
  6. vonmisesvariate

    :冯米赛斯分布;
  7. paretovariate

    :帕累托分布;
  8. weibullvariate

    :韦伯分布。

这篇博客的总结

本篇博客学习了 Python 中随机数相关的知识点,希望对你有所帮助。