当前位置: 首页 > 后端技术 > Python

PythonRandom模块22个函数详解(下)_0

时间:2023-03-26 13:19:26 Python

作者:小武哥来源:AI学习入门今天给大家详细介绍一下python中的random模块。随机数可用于数学、游戏、安全等领域,常被嵌入到算法中,以提高算法的效率,提高程序的安全性。平时数据分析中各种分布的数据结构也会用到。随机模块用于生成伪随机数。之所以称为伪随机数,是因为真正的随机数(或随机事件)是在一定的生成过程中,按照实验过程所示的分布概率随机生成的,结果是不可预测和无形的。计算机中的随机函数是按照一定的算法模拟出来的。对于正常的随机性,会出现某件事发生多次的情况。但是伪随机的,设置在事件触发之前,也就是这十个事件每一个都会发生一次,只是顺序不同而已。现在MP3的随机列表是伪随机的,将要播放的歌曲打乱生成随机列表,每首歌曲播放一次。如果真的是随机的,就会出现某首歌播放次数较多的情况。歌曲越多,重播的概率就越大。注意:random()不能直接访问,需要导入random模块,然后通过random静态对象调用该方法。importrandomimportmatplotlib.pyplotaspltimportseabornassnsimportrandomimportmatplotlib.pyplotaspltimportseabornassns01random说明:random.random()用于生成一个从0到1的随机数:0<=n<1.0语法:random.random()生成随机数random.random()0.7186311708109537生成4位小数的随机列表[round(random.random(),4)foriinrange(10)][0.1693,0.4698,0.5849,0.6859,0.2818,0.216,0.1976,0.3171,0.2522,0.8012]生成一串随机数foriinrange(10):print(random.random())0.43860556392473480.43944378539770780.2318629636828330.64831689635533420.121065812558118550.70438749865313550.387295196584986230.64922561571703930.4634250509335640.229843152207546202choice描述:从非空序列seq从中随机选择一个元素。如果seq为空,则会弹出IndexError异常。语法:random.choice(seq)seq可以是列表、元组或字符串。L=[0,1,2,3,4,5]random.choice(L)2L='wofeichangshuai'random.choice(L)'h'03choices说明:从簇中随机选取k次数据返回aList,可以设置权重。注意每一次选择都不会影响原序列,每一次选择都是以原序列为基础的。语法:random.choices(population,weights=None,*,cum_weights=None,k=1)参数:population:cluster。权重:相对权重。cum_weights:累计权重。k:选择次数。a=[1,2,3,4,5]random.choices(a,k=5)[2,5,2,1,3]random.choices(a,weights=[0,0,1,0,0],k=5)[3,3,3,3,3]random.choices(a,weights=[1,1,1,1,1],k=5)[3,1,5,2,2]多次运行,抽到5的概率是0.5,比其他的都大random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5,4,4,4,2]random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5,4,5,5,2]random.choices(a,weights=[0.1,0.1,0.2,0.3,0.5],k=5)[5,2,2,5,5]random.choices(a,cum_weights=[1,1,1,1,1],k=5)[1,1,1,1,1]每条语句,不妨写一个循环语句,让它输出十次或八次,看用法就够了。结论:参数weights设置了相对权重,它的值是一个列表。设置后,确定每个成员被抽取的概率。比如weights=[1,2,3,4,5],那么第一个成员出现的概率就是P=1/(1+2+3+4+5)=1/15。cum_weights设置累计权重,python会自动将相对权重转换为累计权重,即如果直接给出累计权重,那么就不需要给出相对权重,Python省略了一步执行。比如weights=[1,2,3,4],那么cum_weights=[1,3,6,10],就不难理解为什么cum_weights=[1,1,1,1,1]的输出是都是第一个。04getrandbits说明:返回一个不大于K位的Python整数(十进制),比如k=10,结果是0~2^10之间的整数。语法:random.getrandbits(k)random.getrandbits(10)37905getstate描述:返回一个捕获生成器当前内部状态的对象,可以将其传递给setstate()以恢复此状态。语法:random.getstate()06setstate描述:state应该从之前对getstate()的调用中获得,setstate()将生成器的内部状态恢复到调用getstate()时的状态。从下面的例子可以看出,由于生成器内部状态相同时会产生下一个相同的随机数,所以我们可以使用getstate()和setstate()来获取并重置生成器的内部状态为某个状态。语法:random.setstate(state)state=random.getstate()random.random()0.489148634943random.random()0.22359638172661822random.setstate(state)random.random()0.4891486349407randint说明:用于生成指定范围的整数。语法:random.randint(a,b),其中参数a为下限,参数b为上限,生成的随机数n:a<=n<=brandom.randint(1,8)3random.randint(1,8)408randrange说明:从集合中获取一个随机数,增加指定的基数。例如:random.randrange(10,100,2),结果相当于从序列[10,12,14,16,...96,98]中获取一个随机数,random.randrange(10,100,2)结果中相当于random.choice(range(10,100,2)。语法:random.randrange([start],stop[,step])不指定步长,随机生成一个整数在[a,b)的范围内。指定step,step为步长会进一步限制[a,b)的范围,例如randrange(0,11,2)表示生成[0,11)范围内的随机偶数。如果不指定a,则默认从0开始。无限[random.randrange(0,11)foriinrange(5)][4,6,3,9,5]随机偶数,跑5个数[random.randrange(0,11,2)foriinrange(5)][2,4,8,8,6]09样本说明:从总体样本或集合中随机选取K个不重复的元素,组成一个新的序列。常用于不重复的随机抽样。在不破坏原始序列的情况下返回新序列。要从整数范围内随机抽取一定数量的整数,请使用类似sample(range(1000000),k=60)的东西,它非常高效且节省空间。如果k大于种群的长度,则会引发ValueError。语法:random.sample(population,k)注意:和random.choices()的区别:一个是选择k次,一个是选择k次,选择k次相当于选择然后放回去,而选择k次就是选择不放回去。因此,random.sample()的k值不能超过簇中的元素个数。random.sample(range(1000),k=5)[82,678,664,177,376]L=[0,1,2,3,4,5]random.sample(L,3)[5,3,1]random.sample(L,3)[2,4,5]10种子说明:初始化伪随机数生成器。如果未提供a或a=None,则使用系统时间作为种子。如果a是整数,则将其用作种子。伪随机数生成模块。如果没有提供种子,则默认使用系统时间。使用相同的种子,可以得到完全相同的随机数序列,常用于算法改进测试。语法:random.seed(a=None,version=2)a=random.Random()a.seed(1)[a.randint(1,100)foriinrange(20)][14,85,77,26,50,45,66,79,10,3,84,44,77,1,45,73,23,95,91,4]b=random.Random()b.seed(1)[b.randint(1,100)foriinrange(20)][14,85,77,26,50,45,66,79,10,3,84,44,77,1,45,73,23,95,91,4]11shuffle说明:用于将列表中的元素打乱顺序。它只能用于可变序列。对于不可变序列,请使用下面的sample()方法。语法:random.shuffle(x)L=[0,1,2,3,4,5]random.shuffle(L)L[5,4,1,0,3,2]