Python random模块简介
random模块用来生产伪随机数,random库是使用随机数的Python标准库。概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理解,或者超出了我们的理解范围。计算机不能产生真正的随机数,那么伪随机数也就被称为随机数。
random库包含两类函数,常用的有如下几个
基本随机函数: seed(), random()
扩展随机函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle(),sample()
基本随机函数
Python中产生随机数使用随机数种子来产生。给定一个随机数种子,就能利用梅森旋转算法产生一系列随机序列。每一个数都是随机数,只要随机种子相同,产生的随机数和数之间的关系都是确定的。随机种子确定了随机序列的产生。
seed() 初始化随机种子,默认为当前的系统时间
seed(10) # 产生种子10对应的序列
random() 随机生成一个[0.0, 1.0]之间的小数
>>> import random >>> random.seed(10) >>> random.random() 0.5714025946899135 >>> random.random() 0.4288890546751146
如果不使用随机数种子,它使用的是当前系统时间,后面产生的结果是完全不可再现的。而使用随机数种子,可以将随机数再现
>>> import random >>> random.seed(10) >>> random.random() 0.5714025946899135 >>> random.seed(10) >>> random.random() 0.5714025946899135
扩展随机函数
基本随机函数的功能比较单一,因此增加了一些扩展随机函数。
1、randint()
randint函数的函数原型是randint(a,b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,a必须小于等于b。生成的随机数n : a <= n <= b
>>> random.randint(1,3) 2 >>> random.randint(1,3) 3 >>> random.randint(1,3) 1 >>> random.randint(1,3) 1
2、uniform()
uniform函数的函数原型是uniform(a,b),用于生成一个随机浮点数。两个参数中一个是上限,一个是下限。如果 a < b,则生成的随机数范围 a <= n <= b,如果 a > b,则生成随机数范围 b <= n <= a。
>>> random.uniform(1,3) 1.6555456232441863 >>> random.uniform(1,3) 1.4999933533728007 >>> random.uniform(3,1) 1.0943661817081767 >>> random.uniform(3,1) 1.0068860149210896
3、randrange()
randrange函数的函数原型是randrange(start, stop=None, step=1)。从指定范围内,按指定步长递增的集合中,获取一个随机数。如 rangdrange(1,20,2),就是相当于[1,3,5.....19]去一个随机数。结果和random.choice(range(10, 100, 2) 等效。步长默认为1,randrange(a),意为取 0 <= n < a的任意一个整数。
>>> random.randrange(1,20,2) 3 >>> random.randrange(1,20,2) 9 >>> random.randrange(1,20) 15 >>> random.randrange(1,20)
4、randchoice()
randchoice函数的函数原型是randrange(sequence),获取一个有序序列的随机一个元素。这里的参数表示一个有序类型。列表,元组,字符串等都属于有序类型,字典、集合是无序的。
>>> import random >>> L = [1,2,3,4,5] >>> random.choice(L) 5 >>> random.choice(L) 1 >>> random.choice(range(1,100,2)) 33
5、sample()
sample函数的函数原型是sample(sequence,k),表示从一个有序类型随机获取一个指定长度的片段。sample函数不会修改原有序列。
>>> import random >>> L = [1,2,3,4,5] >>> random.sample(L,2) [4, 3] >>> random.sample(L,3) [1, 4, 2] >>> L [1, 2, 3, 4, 5]
6、shuffle()
shuffle函数的函数原型是shuffle(x, random=None),用于将一个有序序列的元素打乱。
>>> import random >>> L = [1, 2, 3, 4, 5] >>> random.shuffle(L) >>> L [4, 3, 1, 5, 2]
random模块比较常用的函数基本就这些,还有许多不常用的。如正太分布、对数正太分布、卡玛分布等等。