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.pswp.cn/news/39914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大語言模型控制生成的過程Trick:自定義LogitsProcessor實踐

前言 在大模型的生成過程中&#xff0c;部分原生的大語言模型未經過特殊的對齊訓練&#xff0c;往往會“胡說八道”的生成一些敏感詞語等用戶不想生成的詞語&#xff0c;最簡單粗暴的方式就是在大模型生成的文本之后&#xff0c;添加敏感詞庫等規則手段進行敏感詞過濾&#xf…

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…

PostCSS在vue中的使用

1、安裝 PostCSS 和所需的插件。在命令行中運行以下命令&#xff1a; npm install postcss autoprefixer cssnano postcss-pxtorem --save-dev 這將安裝 PostCSS、Autoprefixer、CSSnano 和 postcss-pxtorem 插件&#xff0c;同時將它們添加到項目的開發依賴中。 2、在項目根目…

每天一道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開發…