Python random 模块
Python 中的 random 模块用于生成伪随机数。所产生的数字都是伪随机数,如果需要真的随机性,可以使用 os
模块中的 urandom
函数。random 模块内的 SystemRandom 类也是基于同种功能。
>>> os.urandom(2)
b'\xe8\xc8'
整数
random.randrange
random.randrange(stop)
random.randrange(start, stop[, step])
从 range(start, stop, step)
中返回随机选择的元素
>>> import random
>>> random.randrange(10)
3
>>> random.randrange(0, 10, 2)
4
random.randint(a, b)
返回随机整数 N,a <= N <= b
,相当于 randrange(a, b+1)
>>> random.randint(0, 10)
3
序列
random.choice(seq)
从非空序列 seq 中返回一个随机元素。
>>> s = []
>>> random.choice(s)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
random.choice(s)
File "C:\Python36\lib\random.py", line 257, in choice
raise IndexError('Cannot choose from an empty sequence') from None
IndexError: Cannot choose from an empty sequence
>>> s = [1,2,3,4,]
>>> random.choice(s)
2
random.choices(population, weights=None, *, cum_weights=None, k=1)
New in version 3.6.
如果 population 为空序列,抛出异常 IndexError。
- 参数
k
大小的元素列表,列表中元素可重复,列表元素来自于参数 population。 - 参数
weights
为相对权重列表,weights 列表中的元素个数与参数 population 相同,参数 weights 中元素数值大小决定参数 population 中相同位置元素的权重,权重越高随机出现概率越大。 - 参数
cum_weights
是累积权重列表,累积权重通过相对权重计算,例如相对权重[1,5,1]
等同于累积权重[1,6,7]
,即[(0+1),(1+5),(1+5+1)]
。使用累积权重有更高的执行效率。
weights 或 cum_weights 可以使用任何与 random() 返回的数字类型(包括整数,浮点数和分数)。
>>> random.choices([1, 2, 3], cum_weights=[1, 6, 7], k=2)
[2, 2]
>>> random.choices([1, 2, 3], [1, 5, 1], k=2)
[3, 2]
>>> random.choices([1, 2, 3], k=2) # 未指定,以相等的概率进行选择
[2, 1]
random.shuffle(x[, random])
用于将一个列表中的元素打乱。random 默认是 random.random()
。
如果对不可变序列重新随机排序,可以使用 random.sample(x, k=len(x))
。
>>> random.shuffle(s)
>>> s = [1,2,3,4,]
[3, 4, 1, 2]
random.sample(population, k)
从指定序列中随机获取指定长度 k 的元素序列。sample 函数不会修改原有序列。如果 population 包含重复的,则取出的子序列也是可能包含重复的。
要从一系列整数中选择样本,请使用 range()
对象作为参数。这尤其快速且节省空间:random.sample(range(10000000), k = 60)
。
如果子序列大小大于总体大小,则会引发 ValueError。
>>> s = [1,2,3,4,4]
>>> random.sample(s,4)
[2, 1, 4, 4]
特定值分布
random.random()
返回下一个随机浮点数 range(0.0, 1.0)。
>>> random.random()
0.7790151001888421
random.uniform(a, b)
返回一个随机浮点数 N,两个参数其中一个是上限,一个是下限。如果 a > b
,则生成的随机数 N: a <= N <= b
。如果 a <b
, 则 b <= N <= a
。
>>> random.uniform(10, 20)
19.85832989416698
>>> random.uniform(20, 10)
18.467114459490777
其他
https://docs.python.org/3/library/random.html
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Python random 模块
文章字数:827
本文作者:Bin
发布时间:2018-08-07, 17:04:22
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2018/08/07/Python/Python%20random%20%E6%A8%A1%E5%9D%97/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。