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获得一个月有多少天的方法
Jun 04 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
python中的编码知识整理汇总
Jan 26 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
Python requests库用法实例详解
Aug 14 Python
Python爬取成语接龙类网站
Oct 19 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python八皇后问题解答过程详解
Jul 29 Python
python实现超市商品销售管理系统
Nov 22 Python
Python函数生成器原理及使用详解
Mar 12 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在字符串中查找另一个字符串
2008/11/19 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
Vue实现验证码功能
2019/12/03 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
[38:23]完美世界DOTA2联赛循环赛 FTD vs PXG BO2第二场 11.01
2020/11/02 DOTA
Python中__new__与__init__方法的区别详解
2015/05/04 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
对Django外键关系的描述
2019/07/26 Python
python设置随机种子实例讲解
2019/09/12 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
教师演讲稿范文
2014/01/08 职场文书
表彰先进集体通报
2014/01/12 职场文书
庆七一活动方案
2014/01/25 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技