Python中random模块常用方法的使用教程
作者:Python碎片 发布时间:2023-12-03 16:30:11
前言
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点进去看看。
来源:https://blog.csdn.net/weixin_43790276/article/details/96768637
猜你喜欢
- 目的是想通过给定一个ID,取出所有的子ID,包括子ID的子ID。一开始写成FUNCTION,因为FUNCTION调用方便,但是报错:ERRO
- 简单介绍正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如
- JS调试技巧技巧一:格式化压缩代码 技巧二:快速跳转到某个断点的位置右侧的Breakpoints会汇总你在JS文件所有打过的断点,点击跟ch
- go设置GOROOT和GOPATHgo 里面有两个非常重要的环境变量 GOROOT 和 GOPATH,其中 GOROOT 是安装 go 的路
- 很多人错误地认为ASP是简单、低效的代名词,认为ASP是低能的,不足挂齿的,也很简单,一学就会,一琢磨就精通。有人讲ASP不安全,写ASP的
- 神经网络一般用GPU来跑,我们的神经网络框架一般也都安装的GPU版本,本文就简单记录一下GPU使用的编写。GPU的设置不在model,而是在
- 文档格式的排错 我妈妈_的清单中有数十条菜谱,甚至数百条。如果产生一个致命错误,排错将非常困难 - 你将一行一行地寻找丢失的标记符。如果使用
- 同MongoDB,Redis这样的NoSQL数据库的复制相比,MySQL复制显得相当复杂!概述首先主服务器把数据变化记录到主日志,然后从服务
- 最近,我在做网页的时候,经理老是反应网页中一些栏目中没有背景图片。我说:背景图片有的,你刷新看看。但是他说:我可以刷新看看,但是你不能老是让
- 计算表达式:1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/
- 因为Python是自带文档,可以通过help函数来查询每一个系统函数的用法解释说明。一般来说,关键的使用方法和注意点在这个系统的文档中都说的
- 有过网页制作经验的朋友一定知道:一般来讲,把表格的边框定义为1px时,即border=1,而实际上是2
- 通过锁机制,可以实现多线程同时对某个表进行操作。如下图所示,在某个时刻,用户甲、用户乙、用户丙可能会同时或者先后(前面一个作业还没有完成)对
- list/tuple转置:以二维grid[][]为例:grid = [[row[i] for row in grid] for i in r
- 今天继续给大家介绍Python相关知识,本文主要内容是Python asyncio异步编程简单实现。一、asyncio事件循环简介async
- css实现的圆角矩形的方式很多,但要追求灵活型,上面的结构简单,看起来爽一点注意css所用的图片路径,已修改兼容ie6 ie7 ff ,IE
- 如果你过分信任 Access 2000数据库的密码保护,你可能会因此而蒙受损失。这是因为Access 2000的数据库级密码并不安全,相反它
- 本文研究的主要问题时Python读取word文本操作,分享了相关概念和实现代码,具体如下。一,docx模块Python可以利用python-
- 如果你用ODBC connection (DSN or DSN-less)来访问远端的(UNC path)数据库, OLEDB会出现以下错误
- 本文实例讲述了Python实现获取nginx服务器ip及流量统计信息功能。分享给大家供大家参考,具体如下:#!/usr/bin/python