zoukankan      html  css  js  c++  java
  • python之random模块分析(一)


    random是python产生伪随机数的模块,随机种子默认为系统时钟。下面分析模块中的方法:

    1.random.randint(start,stop):

    这是一个产生整数随机数的函数,参数start代表最小值,参数stop代表最大值,两端的数值都可以取到;

    函数算法时间复杂度:O(1)
    核心源代码:
    return self.randrange(a, b+1)   # 由randrange函数封装而来
    例子:

    1 for i in range(20):
    2   print(rm.randint(0, 10), end=' ')

    2.random.randrange(start,stop,step):
    也是一个随机整数函数,参数可选;

    当只有一个参数时,默认随机范围0到该参数,前闭后开;两个参数,最小值和最大值,前闭后开;三个参数,最小值,最大值和步长,前闭后开。

    算法时间复杂度:O(1)
    核心源代码:
    return istart + istep*self._randbelow(n)    # 该函数由_randbelow函数封装得到
    例子:

    1 for i in range(10):
    2   print(random.randrange(10)) # 产生0到10(不包括)的随机数
    3   print(random.randrange(5,10)) # 产生5到10(不包括)的随机数
    4   print(random.randrange(5,100,5)) # 产生5到100(不包括)范围内的5的倍数的随机数

    3.choice(seq):

    一个随机选择函数,seq是一个非空的集合,在集合中随机选择一个元素输出,元素的类型没有限制。
    核心源代码:
    i = self._randbelow(len(seq))    # 由_randbelow函数得到随机的下标
    return seq[i]
    时间复杂度:O(1)
    例子:

    1 list3 = ["wo", "我是", 2, 8, [2, 3]]
    2 for j in range(10):
    3   print(rm.choice(list3),end=" ")

    4.random():

    这个函数形成从0.0到1.0之间的任意浮点数,左闭右开,没有参数。
    例子:

    1 for j in range(10):
    2   print(rm.random(),end=" ")

    5.send(n=None):

    一个可以对随机数生成器进行初始化的函数,n代表随机种子;当n=None时,随机种子为系统时间,当n为其他的数据,如int,str等,则以提供的数据作为随机种子,此时生成的随机数列固定。

    例子:

    1 rm.seed("hdsfsf")
    2 for i in range(20): # 无论启动多少次程序,输出的序列不变
    3   print(rm.randint(0, 10), end=' ')

    6.getstate()和setstate(state):

    getstate()函数用来记录随机数生成器的状态,setstate(state)函数用来将生成器恢复到上次记录的状态。
    例子:

    1 tuple1 = rm.getstate() # 记录生成器的状态
    2 for i in range(20):
    3   print(rm.randint(0, 10), end=' ')
    4 print()
    5 rm.setstate(tuple1) # 传入参数后恢复之前的状态
    6 for j in range(20):
    7   print(rm.randint(0, 10), end=' ') # 两组输出的结果一样

    7.shuffle(seq,random=None):

    对传入的集合进行乱序操作。只能针对可变序列,如字符串、列表,对于元组等不可变序列会报错,random用来选择乱序操作的方式,如:random=random。
    核心源代码:

    for i in reversed(range(1, len(x))):
    j = randbelow(i+1)
    x[i], x[j] = x[j], x[i]


    时间复杂度:O(n)
    例子:

    1 list3 = ["wo", "我是", 2, 8, [2, 3]]
    2 print(list3)
    3 rm.shuffle(list3, random=None)
    4 print(list3)

    8.sample(population, k):

    population参数是一个序列,如列表、元组、集合、字符串等;从集合中随机抽取K个元素形成新的序列,不会改变原有的序列。

    核心源代码:

    for i in range(k):
    j = randbelow(n) # 使用randbelow函数获得一个随机整数
    while j in selected: # 对取得的随机数去重
    j = randbelow(n)
    selected_add(j)
    result[i] = population[j] # 赋值


    最坏时间复杂度:O(n*n)
    例子:

    1 list3 = ["wo", "我是", 2, 8, [2, 3], 2, 2, 8]
    2 print(list3)
    3 list1 = rm.sample(list3, 4)
    4 print(list1)

    9.uniform(a, b):

    生成参数a到b之间的浮点数的函数,如果a > b,则生成b到a之间的浮点数。
    核心源码:
    return a + (b-a) * self.random()    # random函数的一个封装
    时间复杂度:O(1)
    例子:

    1 for i in range(10):
    2   print(rm.uniform(10, 1))
  • 相关阅读:
    jquery-5 jQuery筛选选择器
    百度富文本编辑器ueditor使用启示
    前端开发思路
    世界硬币:比特币类似的评分系统!
    百度面试题 号码找到符合条件
    彩色图像--色彩空间 YIQ 、YUV 、YCbCr 、YC1C2 和I1I2I3
    HDU 4915 Parenthese sequence
    Visual FoxPro 6.0~9.0解决方案和实例文档和CD写入原件下载
    DWR入门的例子(一个)
    写自己的第二级处理器(3)——Verilog HDL行为语句
  • 原文地址:https://www.cnblogs.com/cwp-bg/p/7468475.html
Copyright © 2011-2022 走看看