如何在 Python 中從列表中隨機選擇元素
-
在 Python 中使用模組
random
從列表中選擇一個隨機元素 -
在 Python 中使用模組
secrets
從列表中選擇一個隨機的元素 -
在 Python 中使用模組
NumPy
從列表中選擇一個隨機元素
本教程向你展示瞭如何在 Python 中從列表中隨機選擇一個元素。有多種簡單的方法來實現這個目標,所有這些方法都涉及到 Python 模組的匯入。
本教程將涵蓋需要 random
、secrets
和 NumPy
模組的解決方案。
請注意,所有這些將被介紹的解決方案都將使用偽隨機數生成器(PRNG)。
在 Python 中使用模組 random
從列表中選擇一個隨機元素
最常用的隨機化模組是 random
模組。這個模組實現了偽隨機效用函式來支援涉及隨機化的操作。
比方說,我們想從一個列表中隨機挑選一個名字,就像投票一樣。
['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
為了從這個列表中挑選出一個隨機的名字,我們將使用 random.choice()
,它將從給出的可用資料中選擇一個元素。
import random
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return random.choice(names)
print("The name selected is: ", selectRandom(names))
當然,輸出將是可變的、隨機的。所以它可以是儲存在變數 names
中的六個名字中的任何一個。
在 Python 中使用模組 secrets
從列表中選擇一個隨機的元素
secrets
模組基本上與 random
用於相同的目的。然而,secrets
提供了一種實現 PRNG 的加密安全方法。
在現實生活中的應用,如儲存密碼、認證、加密和解密以及令牌。secrets
比使用 random
要安全得多,因為它只適用於模擬或不處理敏感資料的操作。
在這個問題中,這兩個模組提供的值是一樣的,因為我們沒有處理任何敏感資料,是為了模擬。
在這個例子中,我們將使用相同的 names
列表。secrets
也有一個版本的函式 choice()
,它產生的變數輸出與 random.choice()
相同。
import secrets
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return secrets.choice(names)
print("The name selected is: ", selectRandom(names))
在 Python 中使用模組 NumPy
從列表中選擇一個隨機元素
NumPy
模組也有用於隨機化的實用函式,並且有一些擴充套件性的工具作為其 choice()
函式的引數。
同樣,我們將使用相同的列表 names
來演示函式 numpy.random.choice()
。
import numpy
names = ['John', 'Juan', 'Jane', 'Jack', 'Jill', 'Jean']
def selectRandom(names):
return numpy.random.choice(names)
print("The name selected is: ", selectRandom(names))
該函式將返回與其他兩個模組產生的變數輸出相同。
NumPy
還為 choice()
提供了其他引數,以列表的形式生成多個輸出。
第二個引數接受一個整數值來決定返回多少個隨機項。假設我們想從列表 names
中返回 4 個隨機元素。
def selectRandom(names):
return numpy.random.choice(names, 4)
print("The names selected are: ", selectRandom(names))
樣本輸出:
The names selected are: ['John', 'Jill', 'Jill', 'Jill']
在隨機結果中,同一個元素有可能重複不止一次。
如果你希望結果項是唯一的,我們可以傳遞第三個 boolean
引數,實現隨機抽樣而不替換。
def selectRandom(names):
return numpy.random.choice(names, 4, False)
輸出示例:
The names selected are: ['Jill', 'John', 'Jack', 'Jean']
該函式將始終產生一個唯一的列表,沒有任何重複的元素。
如果我們新增第三個引數,一個主要的缺點是函式的執行時間,因為它會執行一個額外的任務來檢查重複的元素,並將其替換為結果中還不存在的元素。
總而言之,從 Python 列表中選擇隨機項可以通過使用這三個模組之一來實現。random
、secrets
或 NumPy
。每一個模組都有它的優點和缺點。
如果你想擁有一個加密安全的 PRNG 方法,那麼 secrets
是最好的模組。如果你的目的只是為了模擬或非敏感的資料操作,那麼使用 random
或 NumPy
。如果你想要的結果不止一個隨機結果,那麼就使用 NumPy
。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn