random
伪随机数生成模块。如果不提供 seed,默认使用系统时间。使用相同 seed,可获得相同的随机数序列,常用于测试。
>>> from random import *
>>> a = Random(); a.seed(1)
>>> [a.randint(1, 100) for i in range(20)]
[14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 44, 77, 1, 45, 73, 23, 95, 91, 4]
>>> b = Random(); b.seed(1)
>>> [b.randint(1, 100) for i in range(20)]
[14, 85, 77, 26, 50, 45, 66, 79, 10, 3, 84, 44, 77, 1, 45, 73, 23, 95, 91, 4]
使用示例
生成最大 N 个二进制位的长整数。
>>> getrandbits(5)
29L
>>> bin(getrandbits(5))
'0b11101'
生成 start <= N < stop 范围内的随机整数。
>>> randrange(1, 10)
2
>>> randrange(1, 10, 3) # 支持步进
4
>>> randrange(1, 10, 3)
1
>>> randrange(1, 10, 3)
7
生成 a <= N <= b 范围内的整数。
>>> randint(1, 10)
5
从序列中随机返回元素。
>>> import string
>>> string.digits
'0123456789'
>>> choice(string.digits)
'6'
>>> choice(string.digits)
'1'
>>> choice(string.digits)
'3'
打乱序列,随机洗牌。
>>> a = range(10)
>>> shuffle(a)
>>> a
[6, 4, 8, 7, 5, 3, 0, 9, 2, 1]
从序列中随机挑选 n 个不同元素组合成列表。
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> sample(string.letters, 10)
['I', 'F', 'W', 'O', 'r', 'o', 'A', 'K', 'i', 'h']
>>> "".join(sample(string.letters, 10)) # 生成指定长度的随机字符串很容易
'kMmSgPVWIi'
>>> "".join(sample(string.letters, 10))
'feCTyRZrHv'
生成 0.0 <= N < 1 的随机浮点数。
>>> random()
0.39559451765020448
>>> random()
0.62378508101496177
生成 min <= N <= max 范围内的随机浮点数。
>>> uniform(1, 10)
7.6889886379206587
>>> uniform(10, 1)
5.1617099528426609
该模块还支持三角、β分布、指数分布、伽马分布、高斯分布等非常专业的随机算法。