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 CGI脚本的教程
Jun 29 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
解决pycharm无法识别本地site-packages的问题
Oct 13 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python3.6数独问题的解决
Jan 21 Python
python进程和线程用法知识点总结
May 28 Python
Python实现快速排序的方法详解
Oct 25 Python
代码复现python目标检测yolo3详解预测
May 06 Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
Python数据可视化之用Matplotlib绘制常用图形
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 #Python
You might like
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php4的session功能评述(一)
2006/10/09 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
2013/04/21 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
不提示直接关闭网页窗口的JS示例代码
2013/12/17 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
2016/07/08 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
JavaScript运行原理分析
2018/02/09 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python单例模式实例解析
2018/08/28 Python
浅谈python标准库--functools.partial
2019/03/13 Python
Python函数和模块的使用总结
2019/05/20 Python
python循环输出三角形图案的例子
2019/11/22 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
HTML5进度条特效
2014/12/18 HTML / CSS
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
2014年行政人事工作总结
2014/12/09 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
简单了解 MySQL 中相关的锁
2021/05/25 MySQL