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 基础知识之字符串处理
Jan 06 Python
使用Python对SQLite数据库操作
Apr 06 Python
python批量替换页眉页脚实例代码
Jan 22 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
Python 利用pydub库操作音频文件的方法
Jan 09 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
python支持多继承吗
Jun 19 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
Python实现自动整理文件的脚本
Dec 17 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
python操作xlsx格式文件并读取
Jun 02 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php与php MySQL 之间的关系
2009/07/17 PHP
PHP 动态生成静态HTML页面示例代码
2014/01/15 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
2016/01/07 PHP
PHP获取当前文件的父目录方法汇总
2016/07/21 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
js中更短的 Array 类型转换
2011/10/30 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
基于百度地图实现产品销售的单位位置查看功能设计与实现
2016/10/21 Javascript
微信小程序入门教程
2016/11/18 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python装饰器基础详解
2016/03/09 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
python url 参数修改方法
2018/12/26 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
幼儿教师演讲稿
2014/05/06 职场文书
师德师风个人总结
2015/02/06 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS