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程序中使用Cookie的教程
Apr 30 Python
python通过post提交数据的方法
May 06 Python
python根据日期返回星期几的方法
Jul 06 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
让代码变得更易维护的7个Python库
Oct 09 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python基于numpy模块实现回归预测
May 14 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
You might like
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
bootstrap模态框垂直居中效果
2016/12/03 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python实现静态服务器
2019/09/05 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
求职信写作要突出重点
2014/01/01 职场文书
中班中秋节活动反思
2014/02/18 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
五四青年节的活动方案
2014/08/20 职场文书
离婚财产处理协议书
2014/09/30 职场文书
给老婆的检讨书
2015/01/27 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android