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统计cpu利用率的方法
Jun 02 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
Python使用functools模块中的partial函数生成偏函数
Jul 02 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
Python调用C# Com dll组件实战教程
Oct 12 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
Python 改变数组类型为uint8的实现
Apr 09 Python
Python json读写方式和字典相互转化
Apr 18 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 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
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
axios学习教程全攻略
2017/03/26 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
python中pygame模块用法实例
2014/10/09 Python
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Python socket套接字实现C/S模式远程命令执行功能案例
2018/07/06 Python
Python模块的加载讲解
2019/01/15 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
详解python中eval函数的作用
2019/10/22 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
如何基于Python按行合并两个txt
2020/11/03 Python
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
日语专业毕业生求职信
2013/12/04 职场文书
取保候审保证书
2014/04/30 职场文书
旅游节目策划方案
2014/05/26 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android