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" 转载请保留原文链接及作者。

目录