Python中的常用模块-random模块

该模块实现了各式随机数生成器。

以下示例,都假设我们已经事先全量导入了random模块。

>>> from random import *

random提供了最基础的方法random()方法,它生成一个[0,1]区间的53位浮点数。

>>> random()
0.11968907134955475

生成整型随机数

  1. randint(a, b)返回一个随机整数N,使得a <= N <= b

     >>> randint(1, 10)
     6
    
  2. random模块还提供了只传递一下参数的方法:randrange(stop),返回一个大于等于0,小于等于stop的整数。

     >>> randrange(10)
     4
    

    randrange(start, stop[, step]),从range(start, stop, step)中随机选择一下元素返回。此过程并没有实际构建一个range对象。

     >>> randrange(1,100,2)
     71
     >>> randrange(0,100,2)
     28
     >>> randrange(0,100,3)
     27
    

用于序列类型的方法

也就是对这些类型listtuplestrset的操作。

  1. choice(seq),从非空序列seq中返回一个随机元素。 如果seq为空,则引发IndexError

     >>> choice("abcdefghigklmnopqrstuvwxyz")
     'u'
    
  2. choices(population,weights=None,*,cum_weights=None,k=1)方法支持返回多个元素,和设置各元素的权重,使每个元素被选取的几率不一样。

    population:原序列。 weights:相对权重。 cum_weights:累加权重。 k:选取次数。

     >>> choices([1,2,3,4,5],k=3)
     [5, 2, 3]
    

    参数weights设置相对权重,它的值是一个列表,设置之后,每一个成员被抽取到的概率就等于weights对应下标的值。这意味着,population参数的长度和weights参数必须相同。

    比如weights=[1,2,2,1,1],那么返回第一个成员的概率就是P=1/(1+2+2+1+1)=1/7

     >>> choices([1,2,3,4,5],weights=[1,2,2,1,1],k=3)
     [2, 3, 4]
     >>> choices([1,2,3,4,5],weights=[0,1,1,0,0],k=3)
     [2, 3, 3]
    

    cum_weights设置累加权重,Python会自动把相对权重转换为累加权重,即如果你直接给出累加权重,那么就不需要设置相对权重,且Python省略了一步执行。

    比如设置weights=[1,2,2,1,1],相当于cum_weights=[1,3,5,6,7]。假如设置cum_weights=[1,1,1,1,1]那么,输出将全是第一个成员1了。

  3. 可以看出choices函数返回的元素是可以重复的,如果不希望返回重复的元素,可以使用sample函数。

    sample(population,k),从population中选取k个元素。与random.choices()的区别:一个是选取k次,一个是选取k个,选取k次的相当于选取后又放回,选取k个则选取后不放回。故sample()k值不能超出population的元素个数。

     >>> sample([1,2,3,4,5],k=3)
     [2, 3, 4]
    
  4. shuffle(lst)打乱序列的顺序。

     >>> list = [1,2,3,4,5]
     >>> shuffle(list)
     >>> list
     [3, 1, 5, 2, 4]
    

要打乱不可变序列或者返回新的打乱后的列表,请改用sample(x, k=len(x))