如何在 Python 中從列表中隨機選擇元素

Rayven Esplanada 2021年7月18日 2020年11月7日 Python Python List
  1. 在 Python 中使用模組 random 從列表中選擇一個隨機元素
  2. 在 Python 中使用模組 secrets 從列表中選擇一個隨機的元素
  3. 在 Python 中使用模組 NumPy 從列表中選擇一個隨機元素
如何在 Python 中從列表中隨機選擇元素

本教程向你展示瞭如何在 Python 中從列表中隨機選擇一個元素。有多種簡單的方法來實現這個目標,所有這些方法都涉及到 Python 模組的匯入。

本教程將涵蓋需要 randomsecretsNumPy 模組的解決方案。

請注意,所有這些將被介紹的解決方案都將使用偽隨機數生成器(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 列表中選擇隨機項可以通過使用這三個模組之一來實現。randomsecretsNumPy。每一個模組都有它的優點和缺點。

如果你想擁有一個加密安全的 PRNG 方法,那麼 secrets 是最好的模組。如果你的目的只是為了模擬或非敏感的資料操作,那麼使用 randomNumPy。如果你想要的結果不止一個隨機結果,那麼就使用 NumPy

相關文章 - Python List

  • 在 Python 中將字典轉換為列表
  • 從 Python 列表中刪除某元素的所有出現
  • 在 Python 中從列表中刪除重複項
  • 如何在 Python 中獲取一個列表的平均值
  • Python 列表方法 append 和 extend 之間有什麼區別
  • 如何在 Python 中將列表轉換為字串