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命名空间详解
Aug 18 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
神经网络python源码分享
Dec 15 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
python版本单链表实现代码
Sep 28 Python
python列表使用实现名字管理系统
Jan 30 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
Python Django搭建网站流程图解
Jun 13 Python
python爬取微博评论的实例讲解
Jan 15 Python
解决python3安装pandas出错的问题
May 20 Python
python 进阶学习之python装饰器小结
Sep 04 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
You might like
PHP 字符串 小常识
2009/06/05 PHP
PHP 命名空间实例说明
2011/01/27 PHP
PHP url 加密解密函数代码
2011/08/26 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
详解js异步文件加载器
2016/01/24 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
表单元素与非表单元素刷新区别详细解析
2013/11/06 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
js给table赋值的实例代码
2016/10/13 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
Node.js通过身份证号验证年龄、出生日期与性别方法示例
2017/03/09 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
python实现用户登录系统
2016/05/21 Python
numpy中的高维数组转置实例
2018/04/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
大学生毕业评语
2014/12/31 职场文书
CAD实训总结范文
2015/08/03 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL