Python中random模块常用方法的使用教程


Posted in Python onOctober 04, 2020

前言

Python 的random模块包含许多随机数生成器。

random是Python标准库之一,直接导入即可使用。本文介绍random中常用方法的用法。

一、生成随机的整数

# coding=utf-8
import random
 
 
print(random.randint(1, 5))
print(random.randrange(0, 51, 5))

运行结果:

3
40

randint(start, end)会返回一个start到end之间的整数,这里是左闭右闭区间。也就是说可能会返回end值,在Python中,这个是一个比较特殊的地方,一般来说都是左闭右开的区间。

randrange(start, end, step)返回一个range(start, end, step)生成的列表中的随机一个值。这里是左闭右开区间,如果上面代码的51如果换成50,则不可能返回50。

每次运行的结果是不同的,因为是随机返回其中一个。

二、生成随机的小数

print(random.random())
print(random.uniform(2, 5))

运行结果:

0.49541524802465897
2.948656863619216

random()返回0到1之间的任意一个浮点数。

uniform(start, end)返回start到end之间的任意一个浮点数,其实就是将random()的结果乘(end-start),代码就是这么实现的。

三、从字符串、列表、元组中随机返回一个值

choice_str = 'python'
print(random.choice(choice_str))
choice_list = [i for i in range(1, 6)]
print("choice_list: ", choice_list)
print(random.choice(choice_list))
choice_tuple = (10, 20, 30, 40, 50)
print(random.choice(choice_tuple))

运行结果:

h
choice_list:  [1, 2, 3, 4, 5]
5
20

choice()返回可迭代对象中的一个值。可以是列表、元组、字符串,不能是字典和集合。

四、从字符串、列表、元组中随机返回一次或多次,且设置权重

choice_list = [i for i in range(1, 6)]
print("choice_list: ", choice_list)
print(random.choices(choice_list))
choice_tuple = (10, 20, 30, 40, 50)
print(random.choices(choice_tuple, k=2))
choice_str = 'python'
print(random.choices(choice_str, weights=[0.5, 0, 0.5, 0, 0, 0], k=7))
print(random.choices(choice_str, cum_weights=[0, 0.5, 0.5, 1, 1, 1], k=7))

运行结果:

choice_list:  [1, 2, 3, 4, 5]
[4]
[20, 50]
['t', 'p', 't', 'p', 'p', 't', 't']
['h', 'y', 'h', 'h', 'h', 'h', 'y']

choices(population, weights=None, cum_weights=None, k=1)从可迭代对象中返回一次或多次值,返回结果是一个列表。

weights是每一个值对应的权重列表,默认是None,所有元素权重相等。传入权重列表时,列表长度必须与可迭代对象的长度相等,值与权重按索引一一对应。传入的值可以是任何数字,只要能对比出不同值之间的权重大小就可以,系统会按权重大小来计算返回每个值的可能性,如上面的例子中只会返回“python”中的p和t,因为其他字符的权重为0。

cum_weights是每一个值对应的累计权重列表,默认是None,所有元素权重相等。传入权重列表时,列表长度必须与可迭代对象的长度相等。权重是累计的,每一个位置的累计权重是前面所有元素的权重之和加上当前位置元素的权重,也就是说这个列表后面的值不可能小于前面的值。系统会根据累计权重值计算出每个元素的权重,然后计算返回每个值的可能性,如上面的例子中只会返回“python”中的y和h,因为其他字符的权重是0。

注意:weights和cum_weights不能同时有值,即使计算结果一样。

k值是从可迭代对象中获取值的次数,每次只取其中的一个,重复k次,所以,理论上,有可能k次都取到同一个元素。

五、从字符串、列表、元组中随机获取一个或多个值

sample_list = [i for i in range(1, 6)]
print("sample_list: ", sample_list)
print(random.sample(sample_list, 1))
sample_tuple = (10, 20, 30, 40, 50)
print(random.sample(sample_tuple, 2))
sample_str = 'python'
print(random.sample(sample_str, 3))

运行结果:

sample_list:  [1, 2, 3, 4, 5]
[1]
[10, 40]
['p', 'h', 'o']

sample(population, k)从可迭代对象中随机返回k个元素,返回一个列表。

k表示返回元素的个数,这个参数没有默认值,必须传值。并且,是一次从可迭代对象中返回k个值,不是分k次,每个元素不会重复被取。此外,k值不可以大于可迭代对象的长度,否则报错,而上面choices中的k可以无限大,只要需要。使用场景不同,要注意区别。

六、随机打乱顺序

cards = ['%s-%s' % (a, b) for a in ['Spade', 'Heart', 'Diamond', 'Club'] for b in
   ([str(i) for i in range(3, 11)] + [j for j in 'JQKA2'])] + ['Black joker', 'Red joker']
print("Before: ", cards)
random.shuffle(cards)
print("After: ", cards)

运行结果:

Before:  ['Spade-3', 'Spade-4', 'Spade-5', 'Spade-6', 'Spade-7', 'Spade-8', 'Spade-9', 'Spade-10', 'Spade-J', 'Spade-Q', 'Spade-K', 'Spade-A', 'Spade-2', 'Heart-3', 'Heart-4', 'Heart-5', 'Heart-6', 'Heart-7', 'Heart-8', 'Heart-9', 'Heart-10', 'Heart-J', 'Heart-Q', 'Heart-K', 'Heart-A', 'Heart-2', 'Diamond-3', 'Diamond-4', 'Diamond-5', 'Diamond-6', 'Diamond-7', 'Diamond-8', 'Diamond-9', 'Diamond-10', 'Diamond-J', 'Diamond-Q', 'Diamond-K', 'Diamond-A', 'Diamond-2', 'Club-3', 'Club-4', 'Club-5', 'Club-6', 'Club-7', 'Club-8', 'Club-9', 'Club-10', 'Club-J', 'Club-Q', 'Club-K', 'Club-A', 'Club-2', 'Black joker', 'Red joker']
After:  ['Spade-3', 'Diamond-J', 'Club-8', 'Club-7', 'Diamond-10', 'Spade-J', 'Heart-J', 'Diamond-A', 'Spade-K', 'Spade-10', 'Spade-8', 'Club-10', 'Club-J', 'Heart-9', 'Diamond-4', 'Diamond-5', 'Red joker', 'Spade-5', 'Club-4', 'Club-Q', 'Heart-7', 'Spade-Q', 'Club-A', 'Spade-6', 'Diamond-6', 'Black joker', 'Spade-7', 'Heart-Q', 'Club-9', 'Club-3', 'Heart-K', 'Diamond-Q', 'Diamond-K', 'Spade-2', 'Heart-5', 'Heart-A', 'Heart-4', 'Heart-3', 'Diamond-7', 'Club-K', 'Diamond-9', 'Spade-4', 'Heart-2', 'Spade-A', 'Club-6', 'Club-2', 'Heart-8', 'Diamond-2', 'Heart-10', 'Heart-6', 'Club-5', 'Spade-9', 'Diamond-8', 'Diamond-3']

shuffle()将可迭代对象的顺序随机打乱,上面例子中我们模拟了一副扑克牌,然后用shuffle()完成“洗牌”。

注意:shuffle()没有返回值,是直接对可迭代对象进行修改。

random除了上面的方法外,还有一些按数学分布随机生成数据的方法,如正太分布,指数分布等,这里就不继续举例了,其实random源码也不是很多,里面的方法数量是人工可数的,需要的话您可以在Pycharm中按住Ctrl点进去看看。

总结

到此这篇关于Python中random模块常用方法的使用教程的文章就介绍到这了,更多相关Python random模块常用方法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
Python转换时间的图文方法
Jul 01 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
pytorch numpy list类型之间的相互转换实例
Aug 18 Python
python tkinter组件使用详解
Sep 16 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
django自带的权限管理Permission用法说明
May 13 Python
Python celery原理及运行流程解析
Jun 13 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
Python绘画好看的星空图
Mar 17 Python
python代数式括号有效性检验示例代码
Oct 04 #Python
关于Python字符编码与二进制不得不说的一些事
Oct 04 #Python
Python实现EM算法实例代码
Oct 04 #Python
python em算法的实现
Oct 03 #Python
浅析Python中字符串的intern机制
Oct 03 #Python
Python实现AES加密,解密的两种方法
Oct 03 #Python
python实现AdaBoost算法的示例
Oct 03 #Python
You might like
用PHP读取flv文件的播放时间长度
2009/09/03 PHP
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
Jquery+WebService 校验账号是否已被注册的代码
2010/07/12 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
Nginx设置为Node.js的前端服务器方法总结
2019/03/27 Javascript
Python多线程实例教程
2014/09/06 Python
基于Python List的赋值方法
2018/06/23 Python
python的pip安装以及使用教程
2018/09/18 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
电子商务网站的创业计划书
2014/01/05 职场文书
市场安全管理制度
2014/01/26 职场文书
善意的谎言事例
2014/02/15 职场文书
小学生综合素质评语
2014/04/23 职场文书
数控机床专业自荐信
2014/05/19 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
超市员工管理制度
2015/08/06 职场文书
中学团支部工作总结
2015/08/13 职场文书