Python random模块用法整理

news2025/1/18 12:00:14

随机数在计算机科学领域扮演着重要的角色,用于模拟真实世界的随机性、数据生成、密码学等多个领域。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 random

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

randrange()

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

import random

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

random()

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

import random

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

uniform()

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

import random

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

gauss(mu, sigma)

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

import random

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

sample()

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

import random

seq = (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 random

seq = (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 random

a = [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.coloradmin.cn/o/884742.html

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

相关文章

koa 使用 Mongoose 查询数据

Mongosee 操作符koa 使用 Mongoose 进行 翻页查询koa 使用 Mongoose 进行 多条件查询 mongosee 操作符 在使用 Koa 和 Mongoose 进行数据库查询时&#xff0c;你可以使用以下常用的操作符来构建查询条件&#xff1a; $eq&#xff1a;等于 示例&#xff1a;{ field: { $eq: valu…

pip install mysql出现error: subprocess - exited-with-error的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Linux命令详解 | df命令】 df命令用于显示文件系统的磁盘空间使用情况,包括挂载点和可用空间

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 查看整体磁盘空间使用情况2. 显示指定文件系统类型3. 查看inode信息4. 显示指定列5. 显示总计信息6. 检查特定文件系统空间使用情况7. 定期监控磁盘空间8. 了解磁盘配额9. 监控文件系统健康状态 结论 简介 在Lin…

如何快速更换有问题的PROFINET IO设备?

如何快速更换有问题的PROFINET IO设备? 一般情况下,更换PROFINET设备的步骤如下: 拆下有问题的PN 设备安装新设备打开博途软件在线分配设备名称和IP地址 那么,为了减少设备宕机时间,快速更换有问题的PN IO设备,我们可以采用以下的方法: PLC需支持无介质可更换设备的必需…

ICC2如何write_gds写出pr boundary

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球 在数模混合项目中,需要在前期确定pr boundary的尺寸,可以在virtuoso中画一个pr boundary存def给pr,当然,pr这边在前期修改尺寸也需要给负责模拟版图的同事确认,但ICC2 write gds默认是写不出pr bou…

TienChin 创建菜单页面

上一节当中我们只是给后台添加了对应的菜单&#xff0c;实际上对应的页面还没有存在这节主要就是创建出来页面&#xff1a; 促销活动: activity统计分析: analysis商机管理: business渠道管理: channel线索管理: clue合同管理: contract私教课程: course转派管理: transfer tem…

AMD Zen4撕裂者太霸气了!96核心功耗只有350W

AMD将在今年第三季度发布基于Zen4架构的新一代锐龙线程撕裂者&#xff0c;不但继续在核心数量、性能上碾压对手&#xff0c;还会升级到DDR5、PCIe 5.0。 在最新曝光的一份货物清单中&#xff0c;赫然可以看到三款新的撕裂者&#xff1a; &#xff0d; Threadripper 7995WX 350W…

动设备状态监测:智能化生产的关键利器

动设备状态监测正引领着工业生产的智能化转型。本文将深入探讨动设备状态监测的意义、PreMaint在其中的角色&#xff0c;以及如何实现智能化生产&#xff0c;提高生产效率和可靠性。 1. 动设备状态监测的重要性 随着制造业的发展&#xff0c;设备的状态监测变得至关重要。动设…

Java 中的 JIT 和 AOT

我们都知道&#xff0c;Java 是一种半编译型&#xff0c;半解释型的语言&#xff0c;其编译部分和 C 语言比较类似&#xff0c;解释部分和 Python 语言比较类似&#xff0c;而 Java 则是综合了两种方式的语言。 一、编译与解释 1.1 编译型语言 所谓编译&#xff0c;就是将程…

ClickHouse(二十):Clickhouse SQL DDL操作-2-分区表DDL操作

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &…

TienChin 引入 MyBatisPlus

在父工程当中添加版本号&#xff0c;统一管理&#xff1a; <mybatis-plus.version>3.5.1</mybatis-plus.version> 在父工程当中添加 MyBatisPlus 依赖&#xff1a; <!--MyBatis Plus--> <dependency><groupId>com.baomidou</groupId><a…

单链表相关操作(头插法和尾插法)

目录 1.尾插法建立单链表 带头结点 不带头节点 用户输入建立单链表 带头结点 不带头结点 2.头插法建立单链表 带头结点 用户输入建立单链表 带头结点 不带头结点 头插法和尾插法最大区别在于&#xff0c;尾插法可以顺序输出用户输入的元素&#xff0c;头插法则是逆序…

读高性能MySQL(第4版)笔记02_MySQL架构(下)

1. 事务日志 1.1. 事务日志有助于提高事务的效率 1.1.1. 存储引擎只需要更改内存中的数据副本&#xff0c;而不用每次修改磁盘中的表&#xff0c;这会非常快 1.1.2. 更改的记录写入事务日志中&#xff0c;事务日志会被持久化保存在硬盘上 1.2. 事务日志采用的是追加写操作&…

AMD Zen4最后一招!64核心只需200W

AMD Zen4已经布局得差不多了&#xff0c;不过在服务器上还有最后一招&#xff0c;那就是面向边缘计算、电信基础设施等不需要太强性能、但对功耗和能效很敏感的Siena系列。 Zen4霄龙已经发布了三个系列&#xff0c;标准的Genoa(96核心)、集成3D缓存的Genoa-X(96核心/1152MB三级…

关于牛津大学暑研项目的总结和收获

关于牛津大学暑研项目的总结和收获 关于这篇博客主要是想记录一下这次项目的一些收获和心得&#xff0c;一如三年前参与新加坡国立大学的寒研项目一样。我这次的参加的日期是在八月份的数学&#xff0c;物理和计算机类的&#xff0c;这次分享的内容主要集中在学术、生活和思维…

生信豆芽菜-TMEscore预测免疫浸润程度

网址&#xff1a;http://www.sxdyc.com/immuneTmeScore 一、TMEscore预测免疫浸润程度介绍 使用TMEscore包预测患者免疫浸润程度;参考文章Cancer Immunology Research, 2019, 7(5), 737-750;DOI: 10.1158/2326-6066.CIR-18-0436;PMID: 30842092 二、使用方法 1、数据准备 一个全…

单片机串口通讯实战:详解STM32的串口编程与数据传输

引言&#xff1a; 单片机串口通讯是应用非常广泛的通讯方式&#xff0c;具有简单、灵活、稳定等特点。本文将深入探讨单片机串口通讯的原理、应用和性能优化&#xff0c;同时介绍如何使用STM32单片机进行串口编程&#xff0c;并提供详细的代码示例和注释。 一、单片机串口通讯…

都错了!机械硬盘远比SSD更省电 最多领先94%

相信在绝大多数人的认知中&#xff0c;SSD固态硬盘因为没有HDD机械硬盘那样的移动部件&#xff0c;不但更稳定&#xff0c;还更省电。 但是&#xff0c;存储服务商Scality的研究表明&#xff0c;恰恰相反&#xff0c;HDD更省电。 他们以美光6500 ION 30.72TB QLC SSD、希捷银河…

如何安装Python?

如何安装Python&#xff1f; 安装Python非常简单&#xff0c;让我们一步步来进行。 1. 访问官方网站 首先&#xff0c;您需要访问Python官方网站&#xff08;https://www.python.org/&#xff09;。在首页上&#xff0c;您会看到一个大大的「Downloads」按钮&#xff0c;点击…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心&#xff0c;主要用于海量日志数据的异地扩展备份管理&#xff0c;多条件组合的高效查询&#xff0c;统计和趋势报表生成&#xff0c;设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…