random.seed()

random.seed() 会改变随机生成器的种子;传入的数值用于指定随机数生成时所用算法开始时所选定的整数值,如果使用相同的seed()值,则每次生成的随机数都相同;如果不设置这个值,则系统会根据时间来自己选择这个值,此时每次生成的随机数会因时间的差异而有所不同。

昨天在看书的时候对一段代码不是很理解:

import random
import bisectSIZE = 7
random.seed(1729)
my_list = []
for i in range(SIZE):new_item = random.randrange(SIZE * 2)bisect.insort(my_list, new_item)print('%2d ->' % new_item, my_list)

OUTPUT:

10 -> [10]0 -> [0, 10]6 -> [0, 6, 10]8 -> [0, 6, 8, 10]7 -> [0, 6, 7, 8, 10]2 -> [0, 2, 6, 7, 8, 10]
10 -> [0, 2, 6, 7, 8, 10, 10]

其中new_item = random.randrange(SIZE * 2)返回的随机数列一直是相同不变的,后来发现random.randrange()产生的随机数之所以会固定以因为random.seed()这个方法的原因。

random.seed()方法比较官方的说明在开头也已经写出来了;那个文字性的描述对我来说还是过于的抽象,在查看了很多博客后我又测试了好多个实例,最后对这个方法总算是有一点明白了吧。


第一个例子,我把上面的代码简化了一下:

random.seed(1)
for i in range(1, 5):print(random.randrange(10))

OUTPUT1 :

2
9
1
4

每次运行后,输出的结果都是一个相同的序列。


第二个例子:将random.seed(1)放进了循环体内部

for i in range(1, 5):random.seed(1)print(random.randrange(10))

OUTPUT2 :

2
2
2
2

这次每次输出的序列也都是相同的,只不过序列的元素也是一样的都是2。


开始弄到这里我还是一头雾水,但是偶然间我做了第三个实例后,好像就有点明白了。

random.seed(1)
print(random.randrange(10))
for i in range(1, 5):print(random.randrange(10))

OUTPUT3 :

2
9
1
4
1

最后,将三个OUTPUT的结果放在一起来看一下可能就会清晰很多:

OUTPUT :

2   2   2
9   2   9
1   2   1
4   2   41

从这个结果可以看到:

  1. random.seed()放在循环外是一个序列:2 9 1 4
  2. random.seed()放在循环内部的时候则是另外一个序列:2 2 2 2
  3. 在random.seed()下面先打印一个随机数然后在循环的到的是另外一个序列:2 9 1 4 1;

三种方式的开头都是2,而1和3的前四个数又是一样的,只不过3多打印了一次,这里我们再加入一个例子来证明我的想法:

random.seed(1)
for i in range(1, 6):print(random.randrange(10))

OUTPUT:

2
9
1
4
1

将例子1的循环次数加1,从而得到和3一样的输出次数,最后得出的结果是一模一样的。


总结:

目前我对于random.seed()函数的理解是这样的:

  • random.seed()的返回值是None;但是我觉得他会隐藏的构建一个类似列表的数据结构,这个列表的长度应该是特别大的(我曾将循环次数加到6000次发现返回的结果依旧是相同的),根据你在seed()中传入的参数不同,seed会构建一个元素不同的列表,而random.randrange()会迭代这个列表,按照列表的顺序将每个元素依次提出来作为随机数算法的初始值。这也就是为什么在例子1中设置了一个seed()后每次返回的随机序列都是相同的,以在例子3的结果和例子1的结果也是相同的。

  • 而当我把seed()放进循环中去的时候,依旧会构建一个list,只不过list在循环里面,每次都会被重置,而当random.randrange()每次去迭代的时候由于list一直被循环重置,所以random.randrange()在迭代列表时的指针也就会一直被重定向到首元素,也就一直去使用list中的第一个元素作为随机数算法的开始整数,因此得到的随机数序列就一直是基于list中的第一个元素求得的随机数算法的值2。

上面的想法应该会和seed真实的原理有偏差,但是我觉得这个思想还是挺符合目前这些个实例的逻辑。


对random.seed()的理解相关推荐

  1. python中random.seed(1)_Python-random.seed()

    写在前面的话: 第一次在该平台写东西,而且还是写自己不熟悉的东西哈哈哈. 最近不知道为什么突然对Python很感兴趣,以致于在大后天就要考试的此刻还是想来码一篇关于Python的random.seed ...

  2. 对random.seed()函数的理解

    首先先来看一段代码: from numpy import randomnum = 0 # random.seed(3) while num < 5:random.seed(3)print(ran ...

  3. python随机数种子通俗_随机数种子random.seed()理解

    总结: 若采用random.random(),每次都按照一定的序列(默认的某一个参数)生成不同的随机数. 若采用随机数种子random.seed(100),它将在所设置的种子100范围内调用rando ...

  4. python random模块中seed函数的详解_random.seed()函数理解

    random模块使用Mersenne Twister算法来计算生成随机数.这是一个确定性算法,但是可以通过random.seed()函数修改初始化种子[1].比如: random.seed() # S ...

  5. 关于numpy.random.seed()的参数说明

    python中我们常会用到numpy.random.seed()函数. 其基本用法或作用网上很多人都写过: seed( ) 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed( )值,则 ...

  6. python random seed原理_numpy.random.seed()的使用实例解析

    numpy.random.seed()的使用实例解析 这个函数的使用方法,已经有前辈讲解过了,只是自己在测试的时候有一些思考,所以便写了这篇博客.下面是前辈文章的原话: seed( ) 用于指定随机数 ...

  7. python random seed,python - 字符串重排:固定seed()下利用random.shuffle()简化代码

    目录: 目的:理解random.seed(),通过代码探究并验证其功能. 背景:random()是伪随机,实际上由确定公式根据初始值seed计算得出. 当seed固定时,对特定数据的处理会产生相同的结 ...

  8. np.random.seed()随机数种子

    np.random.seed()随机数种子 np.random.seed()随机数种子 1.随机数种子的理解 2.np.random.seed()的参数 np.random.seed()随机数种子 随 ...

  9. numpy.random.seed()

    numpy.random.seed():用于指定随机数生成时使用算法的开始值,如果没有指定每次生成的值都不一样 如果不指定seed的值,那么每次随机生成的数字都不一样: In [17]: import ...

最新文章

  1. php中进制转换,php中进制转换
  2. 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
  3. java语言使用箭头键画线_Java:使用带箭头键的按键
  4. CompletableFuture详解~runAsync
  5. linux mysql服务基础操作(二)
  6. ubuntu环境变量相关文件/etc/profile,/etc/bash.bashrc,~/.profile,~/.bashrc区别
  7. SQL 2005数据库转为2000的终极解决方案
  8. 为什么我们应该学马化腾,而不是马云
  9. CHIL-SQL-LEFT JOIN 关键字
  10. 小鸡模拟器android,安卓小鸡模拟器运行总结~
  11. 自然语言处理NLP训练营---贪心科技
  12. ECMAScript(pink)
  13. python如何下载安装glfw_Python之OpenGL笔记(1):窗口工具包GLFW的安装
  14. Greedy search与beam search
  15. java代码--------随机输出100个随机数,要求每行10个数
  16. mac导出iphone手机上的ipa包
  17. 二维我的世界源代码(c++)免费复制
  18. 【牛客网】小白月赛16 H 小阳的贝壳
  19. 谈管理:员工的离职原因
  20. 华为OD机考题目(自动化测试)

热门文章

  1. 区块链将成为引导第四次工业革命的重要力量
  2. RigNet神经网络模型自动绑定骨骼
  3. linux转录组分析,完整转录组RNAseq分析流程(tophat2+cufflink+cuffdiff)
  4. 一个程序员的奋斗txt
  5. Java编程:将小写字母转换为大写字母
  6. 学校网页设计成品 基于HTML+CSS+JavaScript仿山东财经大学官网 学校班级网页制作模板 校园网页设计成品
  7. 【Python】字符串转换为ASCII码
  8. 面向对象和面向过程的区别通俗理解
  9. 关于Windows PE
  10. MCU多系统服务器与云平台,MCU多系统服务器与云平台