python中的随机数应用大体包含,随机整数、随机浮点数 和 获取随机数序列三类。
一. 随机整数
1.1 随机整数,包含上下限(闭区间)
randint(a, b):随机选取 [a, b] 之间的一个整数,随机整数包含a 和 b,因此是左右闭区间。
# random.randint(a, b)
r = random.randint(0, 100)
print(r)
1.2 随机整数,包含下限,不包含上限(区间左闭右开 )
randrange(a, b):随机选取 [a, b) 之间的一个整数,随机整数包含a,不包含b。
randrange包含三个参数:
1. start :下限
2. stop :上限
3. step :可选参数,用于设置步长
# random.randrange(a, b)
r = random.randrange(0, 100)
# 设置步长
r = random.randrange(0, 100, 5)
print(r)
# output,因为设置了步长5,所以只能从0,5,10,15,...,95,之间随机
35
二. 随机浮点数
2.1 随机0~1之间的浮点数,!包含0,不包含1
r = random.random()
print(r)
2.2 随机区间内的浮点数
random.uniform(a, b):随机闭区间 [a, b] 内的浮点数,其中不限制 a 和 b 的大小。
# random.uniform(a, b)
# 随机选取闭区间[20, 50]内的一个浮点数
r = random.uniform(20, 50)
# 随机选取闭区间[1, 15]内的一个浮点数
r = random.uniform(15, 1)
三. 序列相关随机
3.1 从已有的序列中随机选择其中一个元素 或 多个元素(可重复,放回采样)
(1) random.choice(a):从有序序列里随机获取一个其中数据(有序序列包括字符串、列表、元组等)。
# 1. 从字符串中随机选取一个字符
r = random.choice('abcdefg')
print(r)
# 2. 从元组中随机选取一个元素
r = random.choice(('aa', 'bb', 'cc', 'dd'))
print(r)
# 3. 从list列表中随机选取一个元素
r = random.choice(['a1', 'a2', 'a3', 'a4'])
print(r)
# 4. 从含有多个类型元素的list列表中选取多个元素
r = random.choice([1, 'abc', ('e, f')])
print(r)
# output
# b
# aa
# a4
# abc
(2) random.choices(a,weight,k):从有序序列里随机获取多个其中数据(有序序列包括字符串、列表、元组等)。
random.choices() 包含三个参数:
1. a :有序序列,从该序列中随机选择 1个 或 多个元素
2. weight :可选参数,表示概率,如果不设置就默认每个数据被取到的概率相同
3. k :可选参数,表示随机获取的次数
返回值:列表类型,内部元素可重复
# 当元素集合是list时
# 1. 默认等概率取值,取2次
r = random.choices(['a1', 'a2', 'a3', 'a4'], k = 2)
print(type(r))
print(r)
# output
# <class 'list'>
# ['a3', 'a2']
# 2. 指定不同元素被获取的概率,取2次
r = random.choices(['a1', 'a2', 'a3', 'a4'], weights=[6, 1, 1, 1], k = 2)
print(r)
# output, 可知a1被获取的概率是60%,
# ['a1', 'a1']
注意!:当元素列表是 list 或 字符串 或 元组 时,random.choices()返回值类型也是 list;
# 元组类型
t = ('t1', 't2', 't3', 't4')
print(type(t))
r = random.choices(t, weights=[1, 1, 1, 6], k = 2)
print(type(r))
# output
# <class 'tuple'>
# <class 'list'>
3.2 从已有的序列中随机选择其中一个元素 或 多个元素(不可重复,不放回采样)
random.sample(a,k):在已知序列 a 中,一次性 + 随机 选取 k 个,同一个元素不会被重复选择;返回值类型 是 list。
注意:元素集合的长度 必须大于 选择次数。
r = random.sample([1, 1, 1, 1, 2], k=2)
print(type(r))
print(r)
# output
# <class 'list'>
# [1, 2]
3.3 随机打乱序列顺序
random.shuffle(a):随机打乱元素集合列表a,然后将结果覆盖原列表a。
注意:被打乱的序列必须是可变的,比如列表;不能是是元组,因为元组是不可修改的。
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)
# output
# [3, 1, 5, 2, 4]