Python從列表中隨機(jī)選擇元素的多種實(shí)現(xiàn)方法
技術(shù)背景
在Python編程中,經(jīng)常會(huì)遇到需要從列表中隨機(jī)選擇元素的場(chǎng)景,比如游戲開發(fā)中隨機(jī)選擇道具、數(shù)據(jù)處理時(shí)隨機(jī)抽取樣本等。Python提供了多種方法來實(shí)現(xiàn)這一功能,不同方法適用于不同的需求。
實(shí)現(xiàn)步驟
1. 使用random.choice()方法
這是最常用的方法,用于從列表中隨機(jī)選擇一個(gè)元素。
import random foo = ['a', 'b', 'c', 'd', 'e'] print(random.choice(foo))
2. 使用secrets.choice()方法
對(duì)于需要加密安全的隨機(jī)選擇(如生成密碼短語),可以使用secrets模塊的choice()方法。該模塊在Python 3.6及以上版本可用。
import secrets foo = ['battery', 'correct', 'horse', 'staple'] print(secrets.choice(foo))
在較舊的Python版本中,可以使用random.SystemRandom類:
import random secure_random = random.SystemRandom() foo = ['a', 'b', 'c', 'd', 'e'] print(secure_random.choice(foo))
3. 使用random.sample()方法
如果需要從列表中隨機(jī)選擇多個(gè)不重復(fù)的元素,可以使用random.sample()方法。
import random
group_of_items = {'a', 'b', 'c', 'd', 'e'}
num_to_select = 2
list_of_random_items = random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1]
print(first_random_item, second_random_item)
4. 使用numpy.random.choice()方法
如果你已經(jīng)導(dǎo)入了NumPy庫,也可以使用numpy.random.choice()方法。
import numpy as np foo = ['a', 'b', 'c', 'd', 'e'] print(np.random.choice(foo))
為了保證結(jié)果的可重復(fù)性,可以設(shè)置隨機(jī)種子:
np.random.seed(123) print(np.random.choice(foo))
如果需要選擇多個(gè)元素,可以傳遞size參數(shù):
print(np.random.choice(foo, 5)) # 有放回抽樣 print(np.random.choice(foo, 5, False)) # 無放回抽樣
5. 使用random.randrange()或random.randint()獲取隨機(jī)索引
如果需要同時(shí)獲取隨機(jī)元素的索引,可以使用random.randrange()或random.randint()方法。
from random import randrange foo = ['a', 'b', 'c', 'd', 'e'] random_index = randrange(len(foo)) print(foo[random_index])
import random foo = ['a', 'b', 'c', 'd', 'e'] randomindex = random.randint(0, len(foo) - 1) print(foo[randomindex])
核心代碼
以下是幾種常用方法的核心代碼匯總:
import random
import secrets
import numpy as np
# random.choice()
foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))
# secrets.choice()
bar = ['battery', 'correct', 'horse', 'staple']
print(secrets.choice(bar))
# random.sample()
group = {'a', 'b', 'c', 'd', 'e'}
num = 2
print(random.sample(group, num))
# numpy.random.choice()
print(np.random.choice(foo))
最佳實(shí)踐
- 普通隨機(jī)選擇:如果只是進(jìn)行普通的隨機(jī)選擇,不涉及加密安全問題,使用
random.choice()方法是最簡(jiǎn)單和高效的。 - 加密安全隨機(jī)選擇:對(duì)于需要加密安全的場(chǎng)景,如生成密碼、驗(yàn)證碼等,使用
secrets模塊的方法。 - 選擇多個(gè)元素:如果需要從列表中選擇多個(gè)不重復(fù)的元素,使用
random.sample()方法。 - 已有
NumPy庫:如果已經(jīng)在項(xiàng)目中使用了NumPy庫,使用numpy.random.choice()方法可以保持代碼的一致性。
常見問題
1. 兩次連續(xù)調(diào)用random.choice()是否會(huì)返回不同結(jié)果?
每次調(diào)用random.choice()的結(jié)果都是隨機(jī)的,可能相同也可能不同。如果需要選擇多個(gè)不同的元素,可以使用random.sample()方法。
2. random.choice()和secrets.choice()有什么區(qū)別?
random.choice()使用的是偽隨機(jī)數(shù)生成器,其結(jié)果是可預(yù)測(cè)的,不適合用于加密安全場(chǎng)景。而secrets.choice()使用的是加密安全的隨機(jī)數(shù)生成器,適用于需要保密的隨機(jī)選擇。
3. random.sample()和random.choices()有什么區(qū)別?
random.sample()進(jìn)行無放回抽樣,即選擇的元素不會(huì)重復(fù)。而random.choices()進(jìn)行有放回抽樣,同一個(gè)元素可能會(huì)被多次選擇。
到此這篇關(guān)于Python從列表中隨機(jī)選擇元素的多種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)Python列表隨機(jī)選擇元素內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python數(shù)據(jù)提取BeautifulSoup的概念語法及使用優(yōu)點(diǎn)詳解
這篇文章主要為大家介紹了python數(shù)據(jù)提取BeautifulSoup概念語法及使用優(yōu)點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
Python常見庫matplotlib學(xué)習(xí)筆記之畫圖中各個(gè)模塊的含義及修改方法
matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令A(yù)PI,十分適合交互式地進(jìn)行制圖,下面這篇文章主要給大家介紹了關(guān)于Python常見庫matplotlib學(xué)習(xí)筆記之畫圖中各個(gè)模塊的含義及修改方法的相關(guān)資料,需要的朋友可以參考下2023-05-05
基于Python實(shí)現(xiàn)超級(jí)瑪麗游戲的示例代碼
這篇文章主要介紹了利用python實(shí)現(xiàn)超級(jí)瑪麗游戲的示例代碼,幫助大家更好的理解和使用python開發(fā)游戲,感興趣的朋友可以跟隨小編一起學(xué)習(xí)一下2022-05-05
Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作
這篇文章主要介紹了Python數(shù)據(jù)分析之?Pandas?Dataframe修改和刪除及查詢操作的相關(guān)資料,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05
python 實(shí)現(xiàn)全球IP歸屬地查詢工具
這篇文章主要介紹了python 實(shí)現(xiàn)全球IP歸屬地查詢工具的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12
淺析pip安裝第三方庫及pycharm中導(dǎo)入第三方庫的問題
這篇文章主要介紹了淺析pip安裝第三方庫及pycharm中導(dǎo)入第三方庫的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
python pyqtgraph 保存圖片到本地的實(shí)例
這篇文章主要介紹了python pyqtgraph 保存圖片到本地的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
pytest解讀fixtures中yield與addfinalizer區(qū)別
這篇文章主要為大家介紹了pytest官方解讀fixtures中yield與addfinalizer區(qū)別,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python使用paddleOCR批量識(shí)別pdf的方法
PaddleOCR可以在圖像、文本、表格等多種場(chǎng)景下進(jìn)行文字識(shí)別,本文主要介紹了Python使用paddleOCR批量識(shí)別pdf的方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03

