Python random模块用法整理

随机数在计算机科学领域扮演着重要的角色,用于模拟真实世界的随机性、数据生成、密码学等多个领域。Python 中的 random 模块提供了丰富的随机数生成功能,本文整理了 random 模块的使用。

文章目录

  • Python random 模块
    • 注意事项
    • Python random 模块的内置函数
      • randint()
      • randrange()
      • random()
      • uniform()
      • gauss(mu, sigma)
      • sample()
      • choice(sequence)
      • shuffle(sequence)
      • seed(a=None)

Python random 模块

注意事项

  • 伪随机性:Python 使用 random 模块生成各种分布的伪随机数。计算机生成的随机数都是伪随机数,它们是由确定性算法生成的,只是看起来像随机。如果需要高度的随机性,需要额外的随机源。

  • 不同类型的随机性:在模拟、密码学等场景中,需要注意不同类型的随机性需求。如果前往 Python 文档以获取此模块的文档,将会看到一条警告:

    在这里插入图片描述
    显然,random 模块只适用于一般的随机数需求。random 模块使用 Mersenne Twister 算法来生成随机数。但是这种算法是完全确定性的,而对于密码学等需要高强度随机性的场景,应该使用 secrets 模块。

Python random 模块的内置函数

下面是 random 模块下的各种内置函数。这些函数能够在不同场景下生成伪随机数:

在这里插入图片描述
下面的列表包含了上述随机数生成函数的简要说明:

函数名描述
randint(a, b)生成一个位于 [a, b] 范围内的随机整数
randrange(start, stop, step)生成一个以 step 递增的整数序列中的随机元素
random()生成一个位于 [0.0, 1.0) 范围内的随机浮点数
uniform(a, b)生成一个位于 [a, b) 范围内的随机浮点数
gauss(mu, sigma)生成一个符合高斯分布的随机浮点数,均值为 mu,标准差为 sigma
sample(population, k)population 序列中随机选择 k 个元素,不重复
choice(sequence)从序列中随机选择一个元素
shuffle(sequence)随机打乱序列中的元素顺序
seed(a=None)初始化随机数生成器的种子,用于重现随机序列

下面是这些函数的更详细介绍及示例。

randint()

此函数生成指定范围之间的整数。它接受两个参数 x x x y y y 并生成整数 i i i,使得 x < = i < = y x <= i <= y x<=i<=y

import randoma = random.randint(3, 6)
print(a)	# 输出:3

randrange()

该函数生成一个以 step 为步长的整数序列中的随机元素。startstop 是范围,取值范围是 [start, stop)。若省略 step 参数,默认为 1。

import randoma = random.randrange(1, 10, 2)
print(a)	# 输出:7

random()

该函数生成一个位于 [0.0, 1.0) 范围内的随机浮点数。所有数字在这个范围内的概率是相等的。

import randoma = random.random()
print(a)	# 输出:0.6427979778735594

uniform()

该函数生成一个位于 [a, b) 范围内的随机浮点数。类似于random(),但可以指定范围。

import randoma = random.uniform(3, 6)
print(a)	# 输出:3.512451152441262

gauss(mu, sigma)

该函数生成一个符合高斯分布(也称为正态分布)的随机浮点数。mu 是均值,sigma 是标准差,控制分布的形状。

import randoma = random.gauss(3, 0.5)
print(a)	# 输出:2.9743970359818612

sample()

如果想要一个序列中的多个随机元素,可以使用 sample()。它需要两个参数 populationk,其中 population 是一个序列,k 是一个整数。然后,该函数从 population 序列中随机选择 k 个元素,并以列表形式返回。选择不重复。

import randomseq = (12, 33, 67, 55, 78, 90, 34, 67, 88)
a = random.sample(seq, 5)
print(a)	# 输出:[88, 78, 67, 34, 33]

choice(sequence)

如果要从特定序列中选择随机元素,可以使用此函数。它需要一个参数——sequence。它从序列中返回一个随机元素。

import randomseq = (12, 33, 67, 55, 78, 90, 34, 67, 88)
a = random.choice(seq)
print(a)	# 输出:88

注意random.choice(seq) 不等同于 random.sample(seq, 1),前者返回元素,后者返回列表。

shuffle(sequence)

此函数采用一个参数 —— 列表。然后,它会将列表的元素打乱并返回。

import randoma = [10, 20, 30, 40, 50]
random.shuffle(a)
print(a)	# 输出:[30, 10, 20, 40, 50]

seed(a=None)

当需要多次生成相同的随机数序列时,可以使用此函数。它需要一个参数 —— 种子值。此值初始化伪随机数生成器。每当使用相同的种子值调用 seed() 函数时,它都会产生完全相同的随机数序列,这对于需要重现随机结果的情况很有用。

import random
# seed value = 3
random.seed(3)
for i in range(3):print(random.random(), end = ' ')print('\n')# seed value = 8
random.seed(8)
for i in range(3):print(random.random(), end = ' ')print('\n')# seed value again = 3
random.seed(3)
for i in range(3):print(random.random(), end = ' ')print('\n')

输出:
0.23796462709189137 0.5442292252959519 0.36995516654807925

0.2267058593810488 0.9622950358343828 0.12633089865085956

0.23796462709189137 0.5442292252959519 0.36995516654807925

可以看出,对于种子 = 3,每次都会生成相同的序列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30行JS代码带你手写自动回复语音聊天机器人

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; 前言 现如今生活中到处都是聊天机器人的身影&#xff0c;聊天机器人不仅仅能减少人工的聊天压力&#xff0c;而且十分的可爱有趣&#xff0c;安卓系统的小AI&#xf…

Springboot整合Mybatis调用Oracle存储过程

1、配置说明 Oracel11g+springboot2.7.14+mybatis3.5.13 目标:springboot整合mybatis访问oracle中的存储过程,存储过程返回游标信息。 mybatis调用oracle中的存储过程方式 2、工程结构 3、具体实现 3.1、在Oracle中创建测试数据库表 具体数据可自行添加 create table s…

Lodash——使用与实例

1. 简介 Lodash是一个一致性、模块化、高性能的JavaScript实用库。Lodash通过降低array、number、objects、string等等的使用难度从而让JavaScript变得简单。Lodash的模块方法&#xff0c;非常适用于&#xff1a; 遍历array、object 和 string对值进行操作和检测创建符合功能的…

字符个数统计(同类型只统计一次)

思路&#xff1a;因为题目圈定出现的字符都是 ascii 值小于等于127的字符&#xff0c;因此只需要定义一个标记数组大小为128 &#xff0c;然后将字符作为数组下标在数组中进行标记&#xff0c;若数组中没有标记过表示第一次出现&#xff0c;进行计数&#xff0c;否则表示重复字…

简单线性回归:预测事物间简单关系的利器

文章目录 &#x1f340;简介&#x1f340;什么是简单线性回归&#xff1f;&#x1f340;简单线性回归的应用场景使用步骤&#xff1a;注意事项&#xff1a; &#x1f340;代码演示&#x1f340;结论 &#x1f340;简介 在数据科学领域&#xff0c;线性回归是一种基本而强大的统…

Kali Linux助您网络安全攻防实战

Kali Linux&#xff1a;黑客与防御者的神器 Kali Linux是一款专为网络安全测试和攻防实践而设计的操作系统。它汇集了大量的安全工具&#xff0c;可以用于渗透测试、漏洞扫描、密码破解等任务&#xff0c;不仅为黑客提供了强大的攻击能力&#xff0c;也为安全防御者提供了测试和…

Kafka 入门到起飞 - 什么是 HW 和 LEO?何时更新HW和LEO呢?

上文我们已经学到&#xff0c; 一个Topic&#xff08;主题&#xff09;会有多个Partition&#xff08;分区&#xff09;为了保证高可用&#xff0c;每个分区有多个Replication&#xff08;副本&#xff09;副本分为Leader 和 Follower 两个角色&#xff0c;Follower 从Leader同…

爬虫逆向实战(十八)--某得科技登录

一、数据接口分析 主页地址&#xff1a;某得科技 1、抓包 通过抓包可以发现数据接口是AjaxLogin 2、判断是否有加密参数 请求参数是否加密&#xff1f; 查看“载荷”模块可以发现有一个password加密参数和一个__RequestVerificationToken 请求头是否加密&#xff1f; 无…

【Linux】Reactor模式

Reactor模式 Reactor模式的定义 Reactor反应器模式&#xff0c;也叫做分发者模式或通知者模式&#xff0c;是一种将就绪事件派发给对应服务处理程序的事件设计模式。 Reactor模式的角色构成 Reactor主要由以下五个角色构成&#xff1a; reactor模式的角色 角色解释Handle(句…

保姆级别讲解Python数据处理,你绝对能会

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 1. 文件读取 2. 数据处理 3. 处理结果输出 总的来说 为了咱们让程序跑起来&#xff0c;我们需…

DAY3,ARM(LED点灯实验)

1.汇编实现开发板三盏灯点亮熄灭&#xff1b; .text .global _start _start: /**********LED123点灯**************/RCC_INIT:1使能PE10 PF10 PE8RCC..寄存器,E[4]1 F[5]1 0x50000a28ldr r0,0x50000a28ldr r1,[r0]orr r1,r1,#(0x3 << 4)str r1,[r0]LED1_INET:2初始化LED…

酷开系统 | 酷开科技大数据,更好的与目标消费人群建立联系

众所周知&#xff0c;OTT的一大优势在于强曝光&#xff0c;能够给消费者带来强烈的视觉冲击&#xff0c;强化品牌认知。但是&#xff0c;要想达到提升品牌认知&#xff0c;首先要保证OTT的流量规模&#xff0c;实现对目标人群的有效覆盖。得年轻消费者得“天下”&#xff0c;年…

tk切换到mac的code分享

文章目录 前言一、基础环境配置二、开发软件与扩展1.用到的开发软件与平替、扩展情况 总结 前言 最近换上了coding人生的第一台mac&#xff0c;以前一直偏好tk&#xff0c;近来身边的朋友越来越多的用mac了&#xff0c;win的自动更新越来越占磁盘了&#xff0c;而且win11抛弃了…

vue elementui v-for 循环el-table-column 第一列数据变到最后一个

这个动态渲染table表格时发现el-table-column 第一列数据变到最后一个 序号被排到后面 代码 修改后 <el-table:data"tableData"tooltip-effect"dark"style"width: 100%"height"500"><template v-for"(item, index) i…

每天一道leetcode:1926. 迷宫中离入口最近的出口(图论中等广度优先遍历)

今日份题目&#xff1a; 给你一个 m x n 的迷宫矩阵 maze &#xff08;下标从 0 开始&#xff09;&#xff0c;矩阵中有空格子&#xff08;用 . 表示&#xff09;和墙&#xff08;用 表示&#xff09;。同时给你迷宫的入口 entrance &#xff0c;用 entrance [entrancerow, …

SpringBoot的配置文件(properties与yml)

文章目录 1. 配置文件的作用2. 配置文件格式3. 配置文件的使用方法3.1. properties配置文件3.1.1. 基本语法和使用3.1.2. properties优缺点分析 3.2. yml配置文件3.2.1. 基本语法与使用3.2.2. yml中单双引号问题3.2.3. yml配置不同类型的数据类型及null3.2.4. 配置对象3.2.5. 配…

android设置竖屏仍然跟随屏幕旋转怎么办

如题所问&#xff0c;我最近遇到一个bug&#xff0c;就是设置了摇感&#xff0c;然后有用户反馈说设置了手机下拉的系统设置-屏幕旋转-关闭。然后屏幕还是会旋转的问题。 首先&#xff0c;我们先从如何设置横竖屏了解下好了 设置横屏和竖屏的方法&#xff1a; 方法一&#x…

uni-app引入sortable列表拖拽,兼容App和H5,拖拽排序。

效果: 拖拽排序 背景&#xff1a; 作为一名前端开发人员&#xff0c;在工作中难免会遇到拖拽功能&#xff0c;分享一个github上一个不错的拖拽js库&#xff0c;能满足我们在项目开发中的需要&#xff0c;下面是我在uniapp中使用SortableJS的使用详细流程&#xff1b; vue开发…

Centos7安装docker后默认开启docker0的网卡|卸载默认网卡

一&#xff1a; 停掉服务 systemctl stop docker [rootwww ~]# systemctl stop docker [rootwww ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor prese…

【bug】Unity无法创建项目

bug UnityHub无法创建项目 UnityHub无法创建项目 出现的问题&#xff1a;在创建新项目时弹出来一个 无法创建项目 尝试的方法&#xff1a; 刷新许可证 ❌没用退出账号重新登陆 ❌没用重启电脑 ❌没用 最后发现是什么问题呢&#xff1f; 2021.3.3这个版本我之前在资源管理器中…