Python 中random 库的详细使用


Posted in Python onJune 03, 2021

Random库主要包含返回随机数的函数,主要用于普通的随机数生成的程序,如果对随机性有特殊要求,比如加密等,可以用函数os.urandom()或者random模块内部的SystemRandom类,这些可以让数据接近真正的随机性。

前言

  • 为啥突然写这个?因为用到就写呗,感觉对生成数据很有用,之前都是百度别人的,今天来对着官方文档写,超级标准!
  • 这边只讲常用的,看了下文档还有什么数学方法,太高级好像用不上

返回整数

random.randrange语法格式

两种写法

random.randrange(stop)
random.randrange(start, stop[, step])
  • start:起始数字,包含(取得到 start 这个值)
  • stop:末尾数字,不包含(取不到 stop 这个值)
  • step:步长

实际栗子

# 栗子一
for i in range(5):
    print(random.randrange(20))

####
17
4
7
7
4


# 栗子二
for i in range(5):
    print(random.randrange(10, 20))

####
13
14
11
17
17


# 栗子三
for i in range(5):
    print(random.randrange(10, 20, 2))

####
12
12
14
14
10

random.randint

语法格式

  • 返回随机整数N满足a<=N<=b
  • 相当于randrange(a,b+1)
random.randint(a, b)

实际栗子

for i in range(5):
    print(random.randint(0,20))

####
19
20
11
6
3

a、b 都可以取得到哦

返回浮点数

random.random()语法格式

返回 [0.0, 1.0) 范围内的下一个随机浮点数

random.random()

实际栗子

# 栗子一
for i in range(5):
    print(random.random())

####
0.9829492243165335
0.43473506430105724
0.5198709187243076
0.6437884305820736
0.7216771961168909


# 栗子二
for i in range(5):
    print(math.ceil(random.random() * 1000))

####
772
352
321
62
127

random.uniform(a, b)

语法格式

  • 返回一个随机浮点数N
  • a<=b时,a<=N<=b
  • b<a时,b<=N<=a
random.uniform(a, b)

实际栗子

# 栗子一
for i in range(5):
    print(random.uniform(1, 10))

####
2.6200262089754593
9.220506911469235
3.0206896704014783
9.670905330339174
1.170694187192196


# 栗子二
for i in range(5):
    print(random.uniform(8, 2))

####
2.696842757954265
6.058794935110275
7.567631220015144
2.2057698202258074
4.454083664106361

传递列表作为参数

random.choice

语法格式

  • 从非空序列 seq 返回一个随机元素
  • 如果 seq 为空,会抛出 IndexError
random.choice(seq)

实际栗子

# 数字数组
print(random.choice([1, 2, 3, 4, 5]))
# 字母数组
print(random.choice(["a", "b", "c"]))
# 字母元组
print(random.choice(("a", "b", "c")))
# 字符串
print(random.choice("abcdef"))
# string 模块返回的大小写字母字符串
print(random.choice(string.ascii_letters))
# string 模块返回的数字字符串
print(random.choice(string.digits))
# string 模块返回的数字字符串+大小写字母字符串
print(random.choice(string.digits + string.ascii_uppercase))


####
5
c
c
e
l
2
F

random.choices

语法格式

  • populaiton:序列
  • weights:普通权重
  • cum_weights:累加权重
  • k:选择次数
  • weights 和 cum_weights 不能同时传,只能选择一个来传
random.choices(population, weights=None, *, cum_weights=None, k=1)

 

看的迷迷糊糊啥意思。。?来看栗子。。

不带参数的栗子

a = [1,2,3,4,5]
print(random.choices(a,k=5))

# 结果
[5, 5, 3, 1, 5]

 

可以重复取元素

带 weight 的栗子一

a = [1, 2, 3, 4, 5]
print(random.choices(a, weights=[0, 0, 1, 0, 0], k=5))

# 结果
[3,3,3,3,3]
  • 序列有多长,weights 对应的序列就得多长,每个位置都是一一对应
  • 像这里,3 的权重是 1,其他是 0 ,所以每次都取 3,因为它的权重最高,其他元素没有权重

带 weight 的栗子二

a = [1, 2, 3, 4, 5]
print(random.choices(a, weights=[0, 2, 1, 0, 0], k=5))

# 结果
[2, 2, 2, 2, 3]

 

2 的权重更大,所以取到它的概率更高

带 cum_weights 的栗子

a = [1, 2, 3, 4, 5]

print(random.choices(a, cum_weights=[1, 1, 1, 1, 1], k=5))

print(random.choices(a, cum_weights=[1, 4, 4, 4, 4], k=5))

print(random.choices(a, cum_weights=[1, 2, 3, 4, 5], k=5))

# 结果
[1, 1, 1, 1, 1]
[2, 2, 1, 2, 1]
[5, 5, 1, 4, 2]

 

是不是看不懂?我也看不懂,但其实就是普通权重相加而已

cum_weights=[1, 1, 1, 1, 1]

  • 等价于 weights=[1, 0, 0, 0, 0]
  • [1,1+0,1+0+0,1+0+0+0,1+0+0+0+0]
  • 看懂了没,太反人类了。。

 

cum_weights=[1, 4, 4, 4, 4]

  • 等价于 weights=[1, 3, 0, 0, 0]
  • [1,1+3,1+3+0,1+3+0+0,1+3+0+0+0]

 

random.shuffle

语法格式

将序列 x 随机打乱位置
只能是列表[],元组、字符串会报错哦
random 暂时没找到有什么用,可以忽略

random.shuffle(x[, random])

实际栗子

# 数字数组
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)

# 字母数组
b = ["a", "b", "c"]
random.shuffle(b)
print(b)


####
[3, 5, 2, 4, 1]
['a', 'c', 'b']

 

random.sample

语法格式

  • 从 population 中取 k 个元素,组成新的列表并返回
  • 每次取元素都是不重复的,所以 population 的长度必须 ≥ k,否则会报错
random.sample(population, k)

实际栗子

全都是 k=3

# 数字数组
print(random.sample([1, 2, 3, 4, 5], 3))
# 字母数组
print(random.sample(["a", "b", "c"], 3))
# 字母元组
print(random.sample(("a", "b", "c"), 3))
# 字符串
print(random.sample("abcdef", 3))
# string 模块返回的大小写字母字符串
print(random.sample(string.ascii_letters, 3))
# string 模块返回的数字字符串
print(random.sample(string.digits, 3))
# string 模块返回的数字字符串+大小写字母字符串
print(random.sample(string.digits + string.ascii_uppercase, 3))

####
[2, 1, 3]
['b', 'c', 'a']
['a', 'b', 'c']
['a', 'f', 'b']
['M', 'w', 'W']
['7', '1', '5']
['R', '8', 'O']

以上就是Python random 库的详细使用的详细内容,更多关于Python random 库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python下函数参数的传递(参数带星号的说明)
Sep 19 Python
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
Python读写Excel文件方法介绍
Nov 22 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
python3库numpy数组属性的查看方法
Apr 17 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
pytorch  网络参数 weight bias 初始化详解
Jun 24 Python
Python 忽略文件名编码的方法
Aug 01 Python
python实战之用emoji表情生成文字
May 08 Python
Python实现简繁体转换
Jun 07 Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
You might like
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
JS简单的图片放大缩小的两种方法
2013/11/11 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
Python实战购物车项目的实现参考
2019/02/20 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
Numpy数组的广播机制的实现
2020/11/03 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
2014年重阳节活动策划方案书
2014/09/16 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
离婚协议书范文2014
2014/10/16 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
党员转正大会主持词
2015/07/02 职场文书
作文之亲情600字
2019/09/23 职场文书
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript