【转】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开始按秒计算的 ...
随机推荐
- mac/Linux源码安装TensorFlow
因为用pip命令直接下载安装会链接到google,导致打不开,比如使用pip install tensorflow碰到如下的问题.因此在本文中,主要介绍了如何通过源码进行TensorFlow的安装 $ ...
- urllib 学习一
说明:Urllib 是一个python用于操作URL的模块 python2.x ----> Urillib/Urllib2 python3.x ----> Urllib ...
- FastDFS 分布式文件系统部署实战及基本使用
FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...
- Python的基础详情
Python的基础信息 Python是一种动态解释性高级语言 Python即可面向对象,也可以面向过程 解释行语言 无需编译 程序以'行'为单位进行执行 执行速度慢 开发效率快 可跨平台 编译型语言 ...
- 用jquery的ajax方法获取return返回值的正确姿势
如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...
- [Android] Android RxBus 用法学习总结
事件总线的好处在于方便组件之间的交互,RxBus不是一个库,而是使用RxJava实现事件总线的一种思想. rxbus和eventbus相比较: RxJava 主要做异步.网络的数据处理,强大之处就是对 ...
- Date类、SimpleDateFormat类
Date 构造方法: 1.无参数构造方法: Date date = new Date(); System.out.println(date);// Thu Mar 28 16:28:40 CST 20 ...
- 六.HashMap HashTable HashSet区别剖析总结
HashMap.HashSet.HashTable之间的区别是Java程序员的一个常见面试题目,在此仅以此博客记录,并深入源代码进行分析: 在分析之前,先将其区别列于下面: 1.HashSet底层采用 ...
- GCC编译器原理(一)04------GCC 工具:nlmconv、nm、objcopy、objdump和 ranlib
1.3.13 nlmconv nlmconv 将可重定位的对象文件(Infile)转换为 NetWare 可加载模块(outfile),并可选择读取头文件信息获取 NLM 头信息. 选项,描述 -I ...
- Volatile关键字理解
Volatile定义 为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量.Java语言提供了volatile,在某些情况下比锁更加方便.如果一个字段被声明成volatile, ...