python random 模块
random 说明
生成伪随机数。不应将此模块的伪随机生成器用于安全目的。 有关安全性或加密用途,应使用 secrets 模块。
设置随机数种子
seed(a=None, version=2)
初始化随机数生成器。如果使用相同的种子,将会生成相同的随机数序列。
import random
random.seed(23)
print(random.random()) # 给定种子后,这个调用每次会输出同样的随机数
生成随机整数
randint(a, b)
返回随机整数 N 满足 a <= N <= b。相当于 randrange(a, b+1)。
import random
# 生成1到10之间的随机整数
random_int = random.randint(1, 10)
print(random_int)
randrange(start, stop[, step])
可以生成一个指定范围内以指定步长递增的随机整数。这大致等价于 choice(range(start, stop, step)),但是支持任意大的取值范围并针对常见场景进行了优化。
import random
# 生成1到10之间的随机偶数
random_even = random.randrange(2, 11, 2)
print("随机偶数:", random_even)
getrandbits(k)
返回具有 k 个随机比特位的非负整数。
import random
bit_num = random.getrandbits(4) # 生成一个4比特长度的随机整数
print("随机比特数:", bit_num)
生成序列随机数
choice(seq)
从非空序列 seq 返回一个随机元素。 如果 seq 为空,则引发 IndexError。
import random
my_list = ['apple', 'banana', 'cherry', 'date']
rand_element = random.choice(my_list)
print(rand_element)
choices(population, weights=None, *, cum_weights=None, k=1)
允许根据权重从序列中进行多次随机选择(有放回抽样),返回大小为 k 的元素列表。如果 population 为空,则引发 IndexError。
population: 必需,表示要选择元素的序列(可以是列表、元组等)。
weights: 可选,表示每个元素的权重列表。权重越高,被选中的概率越大。默认情况下,每个元素的权重相等。
cum_weights: 可选,表示经过累积的权重列表。如果提供了cum_weights,则不需要提供weights。
k: 表示要选择的元素数量,默认为1。
import random
candidates = ['Alice', 'Bob', 'Charlie']
weights = [0.4, 0.3, 0.3] # 对应每个候选人的权重
# 模拟100次投票
results = random.choices(candidates, weights=weights, k=100)
# 统计投票结果
vote_counts = {candidate: results.count(candidate) for candidate in candidates}
print("投票结果:", vote_counts) # 输出:投票结果: {'Alice': 48, 'Bob': 29, 'Charlie': 23}
shuffle(x)
就地将序列 x 随机打乱位置。
import random
my_list = ['apple', 'banana', 'cherry', 'date']
random.shuffle(my_list)
print(my_list) # 输出:['date', 'cherry', 'apple', 'banana']
sample(population, k, *, counts=None)
从总体序列中选取的唯一元素的长度为 k 个的唯一元素,返回一个新的列表。 用于无重复的随机抽样。
在 3.11 版本发生变更: population 必须为一个序列。 不再支持将集合自动转换为列表。
import random
my_list = ['apple', 'banana', 'cherry', 'date']
random_samples = random.sample(my_list, 2)
print(random_samples) # 输出:['banana', 'date']
import random
random_samples = random.sample(['red', 'blue'], counts=[4, 2], k=5) # 等价于 sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)
print(random_samples) # 输出:['red', 'red', 'blue', 'blue', 'red']
生成随机字节
randbytes(n)
生成 n 个随机字节。
import random
import base64
# 定义要生成的随机字节的数量
n = 10
# 生成随机字节
random_bytes = random.randbytes(n)
# 输出随机字节
print(random_bytes) # 输出类似于 b'\xc4%\t\xcfK\x1d\xc0mm\x00'
# 转换为十六进制字符串
hex_string = random_bytes.hex()
print(hex_string) # 输出类似于 c42509cf4b1dc06d6d00
# 转换为整数列表
int_list = list(random_bytes)
print(int_list) # 输出 [196, 37, 9, 207, 75, 29, 192, 109, 109, 0]
# 转换为Base64编码字符串
base64_string = base64.b64encode(random_bytes)
print(base64_string) # 输出类似于b'xCUJz0sdwG1tAA=='
# 转换为可打印字符串(仅对可打印字符)
printable_string = random_bytes.decode('ascii', errors='ignore')
print(printable_string) # 输出可能不是完全可打印,取决于随机字节
实值分布
random()
返回 0.0 <= X < 1.0 范围内的下一个随机浮点数。
import random
rand_num = random.random()
print(rand_num)
uniform(a, b)
返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a 。
终点值 b 可能包括或不包括在该范围内,具体取决于表达式 a + (b-a) * random() 的浮点舍入结果。
import random
rand_float = random.uniform(0, 1)
print(rand_float)
参考文档
https://docs.python.org/zh-cn/3.12/library/random.html#module-random
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2023-04-10 ubuntu22.04 vim中文乱码
2023-04-10 mysql 连接控制插件