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 相关文章推荐
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
django admin 后台实现三级联动的示例代码
Jun 22 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
Nov 14 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
django实现用户注册实例讲解
Oct 30 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
Nov 15 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
python可迭代对象去重实例
May 15 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python 爬取华为应用市场评论
May 29 Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
You might like
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
PHPMailer 中文使用说明小结
2010/01/22 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
jQuery 中ajax异步调用的四种方式
2016/06/28 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
python读取文件名称生成list的方法
2018/04/27 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
如何执行一个shell程序
2012/11/23 面试题
社会实践自我鉴定
2013/11/07 职场文书
护理不良事件检讨书
2014/02/06 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
初婚未育证明样本
2014/10/24 职场文书
自荐信格式范文
2015/03/04 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
4种方法python批量修改替换列表中元素
2022/04/07 Python