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. 机器学习工作流程第一步:如何用Python做数据准备?

    这篇的内容是一系列针对在Python中从零开始运用机器学习能力工作流的辅导第一部分,覆盖了从小组开始的算法编程和其他相关工具.最终会成为一套手工制成的机器语言工作包.这次的内容会首先从数据准备开始. ...

  2. 架构师成长之路6.1 DNS理论

    点击返回架构师成长之路 架构师成长之路6.1 DNS理论 1.DNS一些基本概念       ① FQDN:Full Qualified Domain Name,完全限定域名,即每个域在全球网络都是唯 ...

  3. [hgoi#2019/3/3]赛后总结

    T1--最长公共前缀(lcp) 定义两个字符串S,T 的最长公共前缀lcp(S,T)为最长的字符串R,满足R 既是S 的前缀又是T 的前缀. 给定一个字符串S,下标从1 开始,每次询问给出四个正整数a ...

  4. 1093. Count PAT's

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  5. SVN 错误:Error validating server certificate for 'https://xxxxxxx':443... Mac os svn客户端证书验证缓存 解决

    mac上的SVN今天突然间 不好使了 在进行SVN操作是报出警告信息 Error validating server certificate for 'https://xxxxxxx':443 - T ...

  6. Meavn项目中log4j的使用

    两个步骤: 1.在pom.xml中添加: <dependency> <groupId>log4j</groupId> <artifactId>log4j ...

  7. Hbase记录-Hbase shell使用

    HBase Shell HBase包含可以与HBase进行通信的Shell. HBase使用Hadoop文件系统来存储数据.它拥有一个主服务器和区域服务器.数据存储将在区域(表)的形式.这些区域被分割 ...

  8. 把svn上的mycelipse导到本地的eclipse中【原】

    myeclipse和eclipse的web项目互导时会产生各种问题,现在把我遇到的情况记录如下: eclipse如何把svn上down下来的myeclipseWeb项目变成eclipse的Web项目: ...

  9. Study 3 —— Python运算符

    参考资料:http://www.runoob.com/python/python-operators.html#ysf2 定义变量: a = 10, b = 20 算术运算符: 运算符   描述 实例 ...

  10. spring boot 2.0.3+spring cloud (Finchley)2、搭建负载均衡Ribbon (Eureka+Ribbon+RestTemplate)

    Ribbon是Netflix公司开源的一个负载均衡组件,将负载均衡逻辑封装在客户端中,运行在客户端的进程里. 本例子是在搭建好eureka的基础上进行的,可参考spring boot 2.0.3+sp ...