Python3 random 模块
random 是 Python 标准库中用于生成伪随机数的模块,提供了丰富的随机数生成和随机操作功能,适用于模拟、抽样、打乱顺序等场景。它生成的随机数基于特定算法(伪随机),但对大多数应用场景已足够 "随机"。
random 是 Python 标准库中用于生成伪随机数的模块,提供了丰富的随机数生成和随机操作功能,适用于模拟、抽样、打乱顺序等场景。它生成的随机数基于特定算法(伪随机),但对大多数应用场景已足够 "随机"。
random.random():生成 [0.0, 1.0) 之间的随机浮点数import randomprint(random.random()) # 示例输出:0.7626364327854683
print(random.random()) # 示例输出:0.1258937492145871
random.uniform(a, b):生成 [a, b] 或 [b, a] 之间的随机浮点数a 和 b 之间(包含两端)的随机浮点数,若 a > b 则自动交换范围。print(random.uniform(1, 5)) # 示例:3.821947361245891
print(random.uniform(5, 1)) # 示例:2.103874621598743(与上面范围相同)
random.randint(a, b):生成 [a, b] 之间的随机整数a 且小于等于 b 的整数(包含两端),要求 a <= b,否则报错。print(random.randint(1, 10)) # 示例:7(1到10之间的整数,包括1和10)
print(random.randint(0, 0)) # 结果必为0(范围只有一个值)
random.randrange(start, stop[, step]):生成指定步长的随机整数range(start, stop, step) 序列中随机选择一个整数,不包含 stop(与 range 规则一致)。# 生成 1-9 之间的奇数(步长为2)
print(random.randrange(1, 10, 2)) # 可能输出:1, 3, 5, 7, 9# 省略 start 时,默认从0开始
print(random.randrange(5)) # 等价于 range(5),可能输出:0,1,2,3,4
random.choice(seq):从非空序列中随机选择一个元素IndexError。fruits = ["苹果", "香蕉", "橙子", "草莓"]
print(random.choice(fruits)) # 示例:"香蕉"# 对字符串(也是序列)操作
print(random.choice("hello")) # 示例:"l"
random.choices(population, weights=None, k=1):有放回地随机选择多个元素population:待选择的序列weights:可选参数,为每个元素指定权重(概率),权重越高被选中概率越大k:选择的数量(默认 1)# 基础用法:有放回抽样(可能重复)
nums = [1, 2, 3, 4]
print(random.choices(nums, k=3)) # 示例:[2, 2, 4](允许重复)# 带权重的选择:权重总和无需为1,按比例计算概率
print(random.choices(["A", "B", "C"], weights=[5, 3, 2], k=10))
# 示例:['A', 'A', 'B', 'A', 'C', 'A', 'B', 'A', 'B', 'A'](A出现概率最高)
random.sample(population, k):无放回地随机选择 k 个元素k 个不重复的元素(要求 k <= len(population),否则报错)。cards = ["红桃A", "方块5", "黑桃K", "梅花10", "大王"]
# 随机选3张不重复的牌
print(random.sample(cards, 3)) # 示例:['梅花10', '红桃A', '黑桃K']
random.shuffle(x):原地打乱序列(修改原序列)arr = [1, 2, 3, 4, 5]
random.shuffle(arr) # 原地打乱,无返回值
print(arr) # 示例:[3, 1, 5, 2, 4]
random 模块生成的是 "伪随机数",其序列由初始 "种子" 决定。若设置相同的种子,每次运行会生成相同的随机序列,便于测试和复现。random.seed(a) 设置种子:# 第一次运行:设置种子为10
random.seed(10)
print(random.random()) # 输出:0.5714025946899135
print(random.randint(1, 10)) # 输出:9# 第二次运行:再次设置相同种子
random.seed(10)
print(random.random()) # 输出:0.5714025946899135(与第一次相同)
print(random.randint(1, 10)) # 输出:9(与第一次相同)
string 模块(提供字母、数字等字符集),可生成随机密码、验证码等。import string# 生成包含大小写字母、数字的6位随机密码
chars = string.ascii_letters + string.digits # 所有大小写字母+数字
password = ''.join(random.sample(chars, 6))
print(password) # 示例:"K3pR7q"
random.gauss(mu, sigma) 生成符合正态分布的随机数,mu 为均值,sigma 为标准差(更高效);random.normalvariate(mu, sigma) 功能相同,但性能略低。# 生成均值为0,标准差为1的正态分布随机数
print(random.gauss(0, 1)) # 示例:-0.3241043927457278
random 模块不适合加密场景(如生成密钥),加密需用 secrets 模块(Python 3.6+)。random 模块的函数不是线程安全的,多线程环境下需加锁或使用 Random 类实例(每个线程一个实例)。shuffle() 不能直接作用于字符串 / 元组,需先转为列表:
s = "hello"
lst = list(s)
random.shuffle(lst)
print(''.join(lst)) # 示例:"lehlo"
random 模块覆盖了大多数随机操作需求,从基础的随机数生成到序列抽样、打乱等。核心函数包括:random()、uniform()randint()、randrange()choice()、choices()、sample()、shuffle()seed()