【转】python之random模块分析(一)
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模块分析(一)的更多相关文章
- python之random模块分析(一)
random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): 这是一个产生整数随机数的函数,参数start代 ...
- python的random模块(生成验证码)
python的random模块(生成验证码) random模块常用方法 random.random() #生成0到1之间的随机数,没有参数,float类型 random.randint(1, 3) # ...
- Python中random模块生成随机数详解
Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...
- 你真的用好了Python的random模块吗?
random模块 用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结 ...
- Python之random模块
random模块 产生随机数的模块 是Python的标准模块,直接导入即可 import random 1)随机取一个整数,使用.randint()方法: import random print(ra ...
- Python:random模块
近排练习代码时候经常会用到random模块,以防后面忘记还是需要记录一下. 首先导入模块: import random random.random():用于生成一个0到1的随机浮点数: 0 <= ...
- ZH奶酪:【Python】random模块
Python中的random模块用于随机数生成,对几个random模块中的函数进行简单介绍.如下:random.random() 用于生成一个0到1的随机浮点数.如: import random ra ...
- python 之 random 模块、 shutil 模块、shelve模块、 xml模块
6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...
- Python time & random模块
time模块 三种时间表示 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的 ...
随机推荐
- angular 中如果表单有相同的name一般会出现如下错误
Unhandled Promise rejection Cannot assign to a reference or variable
- 【C#】C#获取文件夹下的所有文件
#基础知识 1.获得当前运行程序的路径 string rootPath = Directory.GetCurrentDirectory(); 2.获得该文件夹下的文件,返回类型为FileInfo st ...
- springboot整合mybatis出现的一些问题
springboot整合mybatis非常非常的简单,简直简单到发指.但是也有一些坑,这里我会详细的指出会遇到什么问题,并且这些配置的作用 整合mybatis,无疑需要mapper文件,实体类,dao ...
- python django基础三 模版渲染
request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象.Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 reque ...
- HDU 1115(求质量均匀分布的多边形重心 物理)
题意是给一个 n 边形,给出沿逆时针方向分布的各顶点的坐标,求出 n 边形的重心. 求多边形重心的情况大致上有三种: 一.多边形的质量都分布在各顶点上,像是用轻杆连接成的多边形框,各顶点的坐标为Xi, ...
- 028、限制容器对CPU的使用(2019-01-23 周三)
参考https://www.cnblogs.com/CloudMan6/p/7003199.html 默认情况下,所有容器都可以平等的使用host cpu资源,没有限制 docker 可以通过 ...
- 爬虫基础01-day23
写在前面 上课第23天,打卡: 每天进步一点,开心一点 ^_^ 爬虫 - 基本操作 概要: - 发送Http请求,Python Http请求,requests - 提取指定信息,Python 正则 ...
- React Native的语法之ES5和ES6
原文地址:http://www.devio.org/2016/08/11/React-Native%E4%B9%8BReact%E9%80%9F%E5%AD%A6%E6%95%99%E7%A8%8B- ...
- Retrofit的通讯方式示例
Retrofit有两种通讯方式,同步和异步 异步方式: APIService req; req = RetrofitManager.getInstance().createReq(APIService ...
- svn 在show log 时候出现 want to go offline
今天终于把SVN服务器给配置好了,可以正常显示log信息了. 这周以来一直都在想着怎样解决svn log 显示 no date 这一问题,一时间不知道是怎么回事,上网都没能找到很好的解决方法.今天在使 ...