0.摘要
本文主要介绍random模块的各种方法,并用python3做功能展示。
1.random.random()
产生一个位于[0,1)区间的随机数。
random.random() #产生一个[0,1)的数
10 * random.random() #产生一个[0,10)的数
2.random.uniform(a,b)
这个方法的官方解释很高深,理解不了:
uniform(a, b) method of random.Random instance
Get a random number in the range [a, b) or [a, b] depending on rounding.
右区间的开闭取决于四舍五入,怎么个四舍五入呢?找到一个看似正确的解释,供和我一样迷惑的读者参考吧。
https://stackoverflow.com/questions/13213496/what-does-depending-on-rounding-exactly-mean
a = random.uniform(1.23,4.56) #产生一个位于1.23~4.56范围内的随机数
b = random.uniform(1.5,-10) #产生一个位于-10~1.5范围内的随机数
我自己的直观理解,就是random.uniform(a,b),得到的是一个位于a,b之间的随机数(暂且不讨论区间开闭问题),
并且,a > b,a =b,a<b都可以。
3.random.randint(a,b)
生成一个位于[a,b]的随机整数。a<=b 。注意,两边都是闭区间。
r = random.randint(-100,100) #产生一个位于[-100,100]区间内的整数
4.random.randrange(start,stop,step)
生成一个位于[start,stop)的随机整数,注意,start,stop,step都必须是整数,step为可选参数,默认步长为1。
这个函数主要是为了弥补randint方法的不足,因为randint随机数生成区间两边都是闭区间,这在python中是不友好的。
并且,start 可以小于 stop(步长需要为负数)。
r = random.randrange(1,100) #产生一个在[1,100)之间的整数
r = random.randrange(100,0,-2) #从(0,100]区间中,随机取一个偶数
5.random.sample(population, k)
从population取k个不重复的元素,并存放到列表中,原始数据population保持不变。
population可以是列表、元组、集合。
a = range(100)
b = set(a)
print(random.sample(a,10)) #从列表a中随机取10个元素
print(random.sample(b,10)) #从集合b中随机取10个元素
6.random.choice(seq)
从非空列表中随机选取一个元素。
seq可以是列表、元组。
a = range(100)
b = tuple(a)
print(random.choice(a)) # 从列表a中随机选取一个元素
print(random.choice(b)) # 从元组b中随机选取一个元素
7.random.shuffle(x, random=None)
将x随机打乱,并替换现有的x。该函数没有返回值。
这里说一下random参数:这个参数通常不使用,它要求是一个函数,该函数无参数,能够返回 [0.0, 1.0)的随机值。如果random=None,则random=random.random.
a = list(range(10))
print(a)
random.shuffle(a)
print(a)
运行上述程序,我们会发现执行random.shuffle前后的两个a不同了,后者被随即打乱。
这里再举一个random参数的例子,不再详细说明:
import random
import numpy as np
a = list(range(10))
random.shuffle(a,np.random.random)
print(a)
8.random.seed(x)
random.seed(x)用于设置随机函数的初始状态,如果x相同,那么两次random操作,得到的结果就是相同的。
x是实数,可以是整数,也可以是浮点数,可以使正数,也可以是负数或0。
import random
a = random.random()
b = random.random()
print(a,b)
random.seed(0)
a = random.random()
random.seed(0)
b = random.random()
print(a,b)
从结果上看,第一次a,b是不同的,第二次的a,b是相同的。
注意:random.seed()作用效果只有一次:
import random
random.seed(1)
for _ in range(10):
print(random.randint(1,10),end=' ')
print()
print('==================================')
for _ in range(10):
random.seed(1)
print(random.randint(1, 10),end=' ')
由于第二次random.seed()写在了for循环中,所以输出的都是3.