萌新学 Python 之 random 函数
random 模块:主要用来生成随机数
先导入包:import random
randint(a, b),生成 [a, b] 之间的整数,包含边界 a 和 b,a 和 b 为整数
random(),生成的是 [0,1) 之间的浮点数,包含 0 不包含 1
randrange(起始, 结束, 步长),生成 [起始, 结束) 之间的整数,步长默认为 1
uniform(a, b),生成 [a, b] 之间的浮点数
gauss(期望值, 标准差),生成高斯分布(正态分布)的浮点数
seed(整数),随机种子数,不带参数,以当前时间生成初始种子数,当使用的种子数相同时,随机生成的序列数就相同
shuffle(列表),随机将原列表的元素打乱
sample(序列, 指定的长度),随机抽取序列中指定长度的元素,返回列表
choices(序列, weights = 相对权重, cum_weights = 累加权重, k = 抽取次数),
随机从序列中抽取 k 次元素,返回列表,默认随机抽取的每个元素概率相同
import random
print(len(dir(random)), dir(random))
# randint(a, b),生成 [a, b] 之间的整数,包含边界 a 和 b,a 和 b 为整数
print(random.randint(1, 10))
# random(),生成的是 [0,1) 之间的浮点数,包含 0 不包含 1
print(random.random())
# randrange(起始, 结束, 步长),生成 [起始, 结束) 之间的整数,步长默认为 1
print(random.randrange(1, 10))
print(random.randrange(1, 10, 2))
print(random.randrange(10, 1, -2))
# uniform(a, b),生成 [a, b] 之间的浮点数
print(random.uniform(1.1, 2.2))
# gauss(期望值, 标准差),生成高斯分布(正态分布)的浮点数
print(random.gauss(0, 1))
print([random.gauss(0, 1) for _ in range(50)])
# seed(整数),随机种子数,不带参数,以当前时间生成初始种子数,当使用的种子数相同时,随机生成的序列数就相同
random.seed(1)
print(random.random())
# shuffle(列表),随机将原列表的元素打乱
lst = ['a', 'b', 'c', 'd']
print(lst) # ['a', 'b', 'c', 'd']
# 打乱列表元素
random.shuffle(lst)
print(lst) # ['c', 'd', 'b', 'a']
# sample(序列, 指定的长度),随机抽取序列中指定长度的元素,返回列表
lst = ['a', 'b', 'c', 'd']
print(random.sample(lst, 2)) # ['d', 'b']
# choices(序列, weights = 相对权重, cum_weights = 累加权重, k = 抽取次数),随机从序列中抽取 k 次元素,返回列表,默认随机抽取的每个元素概率相同
# 从列表中随机抽取一个元素,每个元素抽到的概率一样
print(random.choices(['a', 'b', 'c', 'd'])) # ['b']
# 从列表中随机抽取两个元素,概率一样
print(random.choices(['a', 'b', 'c', 'd'], k = 2)) # ['b', 'a']
# 从列表中随机抽取多个元素,概率一样
print(random.choices(['a', 'b', 'c', 'd'], k = 10)) # ['b', 'd', 'b', 'c', 'd', 'c', 'b', 'd', 'c', 'a']
# weights 相对权重,从列表中随机抽取多个元素,设置每个元素的权重 weights = [1, 2, 3, 4],a 的概率是 1/(1+2+3+4),以此类推,抽到 d 的概率更高
print(random.choices(['a', 'b', 'c', 'd'], weights=[1, 2, 3, 4], k = 10)) # ['c', 'a', 'd', 'a', 'd', 'd', 'd', 'd', 'c', 'd']
''' 累加权重与相对权重的计算公式:cum_weights = [sum(weights[:i+1]) for i in range(len(weights))]
比如 weights = [1, 2, 3, 4],cum_weights = [1, 1+2, 1+2+3, 1+2+3+4] = [1, 3, 6, 10] '''
累加权重与相对权重的计算公式:
cum_weights = [sum(weights[:i+1]) for i in range(len(weights))]
比如 weights = [1, 2, 3, 4],cum_weights = [1, 1+2, 1+2+3, 1+2+3+4] = [1, 3, 6, 10]
如果 cum_weights = [1, 1, 1, 1],那么 weights = [1, 0, 0, 0]
cum_weights 和 weights 只能使用其中之一