python的random模块函数分析(一)
来源:互联网 发布:超声波驱狗器 知乎 编辑:程序博客网 时间:2024/05/22 09:18
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))
- python的random模块函数分析(一)
- python的random模块函数分析(一)
- python的 random模块
- Python的random模块
- Python的random模块
- Python random模块常用函数
- python pandas中的random模块一些函数的用法
- python的np.random模块
- 10、Python 的random模块
- 【转】Python random模块常用函数
- [Python]random模块中的常用函数
- Python笔记:random模块常用函数
- 【python系列】经常用到的random模块
- python:与概率有关的random模块
- python中numpy的random模块
- Python的numpy.random模块中文简介
- python学习笔记二(python的random模块、collection模块)
- Python3的Random模块常用函数
- c++ primer plus阅读笔记14---虚基类
- JS中的数据绑定和DOM回流
- 凸多边形的最优三角剖分
- consul的跨局域网服务发现
- Linq查询
- python的random模块函数分析(一)
- 神经网络中BP(back propagation)到底在干些什么
- 设计模式之-适配器模式
- 数组转化为二叉树并实现对其遍历
- <c语言经典100例>c4 判断一年中的第几天
- JZOJ5344. 【NOIP2017模拟9.3A组】摘果子
- 错排公式
- Java并发编程艺术 6 Java并发容器和框架
- win10下sigmaplot 12.5 打开程序出现问题的解决办法