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))
random模块函数分析(一)的更多相关文章
- day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)
1. json序列化模块 # ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据 ...
- 【转】python之random模块分析(一)
[转]python之random模块分析(一) random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): ...
- python之random模块分析(一)
random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): 这是一个产生整数随机数的函数,参数start代 ...
- python学习笔记(七)- 递归、python内置函数、random模块
1.函数的不固定参数: #参数不是必填的.没有限制参数的个数.返回参数组的元组 def syz(*args): #参数组,不限制参数个数 #‘args’参数的名字可以随便命名 print(args) ...
- Python中random模块在主函数中设置随机种子是否对于调用的函数中的随机值产生影响?
一个问题,加入我有一个工程文件,在main函数里面调用random模块,设置随机种子,主函数中的随机种子的设置是否会影响主函数所调用的函数中的随机值? 实际上这个问题非常重要,比如你在跑网络的时候,初 ...
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- numpy.random模块常用函数解析
numpy.random模块中常用函数解析 numpy.random模块官方文档 1. numpy.random.rand(d0, d1, ..., dn)Create an array of the ...
- random模块常用函数
random模块常用函数: from random import * # Random float: 0.0 <= x < 1.0 random() # Random float: 2.5 ...
- 函数和常用模块【day06】:random模块(三)
本节内容 1.简述 2.random模块 3.string模块 4.生成随机数 一.简述 我们经常会使用一些随机数,或者需要写一些随机数的代码,今天我们就来整理随机数模块:random模块 二.ran ...
随机推荐
- STK卫星工具箱下载
简介 STK的全称是Satellite Tool Kit(卫星工具箱),STK/Pro 9.0最新出品,完整版,是由Analytical Graphics公司开发的一款在航天工业领域中处于绝对领先地位 ...
- PHP删除文件夹及其文件
<?php function deletedir($path){ $openpath = opendir($path); while ($f = readdir($openpath)){ $fi ...
- 实验楼 1. k-近邻算法实现手写数字识别系统--《机器学习实战 》
首先看看一些关键词:K-NN算法,训练集,测试集,特征(空间),标签 举实验楼中的样例,通俗的讲讲K-NN算法:电影有两个分类(标签)-动作片-爱情片.两个特征--打斗场面--亲吻画面. 将那些数字和 ...
- 【JAVASCRIPT】React学习-JSX 语法
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 JSX 语法 1. 定义 JSX 是javascript + xml 的合集,我们可以将javascript 与 ht ...
- div标签清除float浮动样式方法
方法一. 这个方法来源于positioniseverything ,通过after伪类实现,完全兼容当前主流浏览器. 1 <style type="text/css"> ...
- [NOIP 2011]聪明的质监员
聪明的质监员 题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1. 给定 m个区间[ ...
- 木棍分割[HAOI2008]
题目描述 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且 ...
- NYOJ--21--bfs--三个水杯
/* 输入 第一行一个整数N(0<N<50)表示N组测试数据 接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3> ...
- 一个想法照进现实-《IT连》创业项目:聊聊IT连App是如何思考解决IT人员单身问题的
前言: 根据最早我编写的IT联盟社区众筹计划书的思路方向:社交->资讯=>评级=>培训. 现在在实现第一个阶段中,而且这个阶段可能会走很久. 今天开文,主要是讲述一下,现在的版本为什 ...
- MacOS下安装gdb、mgo
安装gdb:http://blog.panks.me/posts/2013/11/install-gdb-on-os-x-mavericks-from-source/ 注意最后两步: killall ...