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

1.random.randint(start,stop):

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

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

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

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

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

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

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

3.choice(seq):

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

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

4.random():

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

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

5.send(n=None):

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

例子:

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

6.getstate()和setstate(state):

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

 tuple1 = rm.getstate() # 记录生成器的状态
for i in range(20):
  print(rm.randint(0, 10), end=' ')
print()
rm.setstate(tuple1) # 传入参数后恢复之前的状态
for j in range(20):
  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)
例子:

 list3 = ["wo", "我是", 2, 8, [2, 3]]
print(list3)
rm.shuffle(list3, random=None)
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)
例子:

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

9.uniform(a, b):

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

 for i in range(10):
  print(rm.uniform(10, 1))

python之random模块分析(一)的更多相关文章

  1. 【转】python之random模块分析(一)

    [转]python之random模块分析(一) random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): ...

  2. python的random模块(生成验证码)

    python的random模块(生成验证码) random模块常用方法 random.random() #生成0到1之间的随机数,没有参数,float类型 random.randint(1, 3) # ...

  3. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  4. 你真的用好了Python的random模块吗?

    random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结 ...

  5. Python之random模块

    random模块 产生随机数的模块 是Python的标准模块,直接导入即可 import random 1)随机取一个整数,使用.randint()方法: import random print(ra ...

  6. Python:random模块

    近排练习代码时候经常会用到random模块,以防后面忘记还是需要记录一下. 首先导入模块: import random random.random():用于生成一个0到1的随机浮点数: 0 <= ...

  7. ZH奶酪:【Python】random模块

    Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下:random.random() 用于生成一个0到1的随机浮点数.如: import random ra ...

  8. python 之 random 模块、 shutil 模块、shelve模块、 xml模块

    6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...

  9. Python time & random模块

    time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) :         通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的 ...

随机推荐

  1. Min_25 筛

    Min_25 筛 yyb好神仙啊 干什么用的 可以在\(O(\frac{n^{\frac 34}}{\log n})\)的时间内求积性函数\(f(x)\)的前缀和. 别问我为什么是这个复杂度 要求\( ...

  2. SharePoint 2013 APP 开发示例 (三)使用远程的web资源

    在这个示例里我们将详细介绍 TokenHelper 类, 我们将看到它是怎么简单地从远程web站点访问SharePoint的.我们还将取到它的一些值.这将帮助我们理解连接是怎么被构造的,同时也方便我们 ...

  3. windows安装redis的正确姿势

    安装: 1,redis官方下载地址:https://redis.io/download,redis 64位下载地址:https://github.com/ServiceStack/redis-wind ...

  4. [hdu6148][Valley Numer]

    hdu6148 思路 一个数位dp模板题,注意判断前导0.用一个bz来记录当前是应该增还是可增可减.然后排除不满足条件的情况并进行dp即可. 代码 #include<cstdio> #in ...

  5. csp20160904解题报告

    dijkstra+贪心 每次加一个到起始点(首都)距离最小的点. 然后加边,这个最小点必然通过一条边和已加入的某个点相连,在这个最小点与已加入的点相连的边中,选取最短的一条边加入. 证明如下: 前提: ...

  6. Android Support Library 是什么?

    这两天刚开始学习安卓,这里记录下这两天遇到的一些小问题. 首先先贴一个安卓 API 等级. 官方地址:https://developer.android.com/about/dashboards/ ( ...

  7. NOIP 普及组 2014 比例简化

    传送门 https://www.cnblogs.com/violet-acmer/p/9898636.html 题解: 一开始想多了,以为得保证两者之间的相对比率,至少不能改变的太离谱啊. but,直 ...

  8. Centos7.2安装搜狗拼音

    方法一: Fedora 19/20/21/rawhide 使用以下命令添加源: # yum install dnf-plugins-core # dnf copr enable mosquito/my ...

  9. JS模板引擎handlebars.js的简单使用

    handlebars.js的使用 首先我们要明白handlebars.js是干什么用的,我们知道使用jsp很麻烦, 于是我们开始使用freemarker等模板引擎,但这个只是针对服务器端来解 析的,那 ...

  10. WCF开发实战系列五:创建WCF客户端程序

    WCF开发实战系列五:创建WCF客户端程序 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 在前面的三篇文章中我们分别介绍了WCF服务的三种载体:IIS.Self-Hos ...