首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python random.choice() 函數教學:從序列隨機選取元素

     編輯:更多程式設計知識

random.choice(seq) 從非空序列(列表、元組、字串、range 等)中等機率隨機回傳一個元素。本文說明語法、參數、回傳值、常見用法、錯誤處理與進階變體。

函數簽名


import random
random.choice(seq)  # seq: 非空序列

基本範例


import random

print(random.choice([1, 2, 3, 5, 9]))      # 如 2
print(random.choice('A String'))           # 如 'n'
print(random.choice(('red', 'green', 'blue')))  # 如 'green'
print(random.choice(range(10)))            # 0-9 隨機整數

常見用法

  1. 隨機挑選列表項目:抽獎、A/B 測試分桶、隨機測試資料。
  2. 字串隨機字元:產生驗證碼、臨時密碼片段。
  3. 加權隨機(需自行實作):choice 僅等機率,加權請用 random.choices(population, weights, k=1)[0] (Python 3.6+)。

錯誤處理


try:
    random.choice([])
except IndexError as e:
    print(e)  # Cannot choose from an empty sequence

生產碼建議先檢查 if seq: 或捕獲 IndexError。

進階變體

函數Python 版本說明
random.choices(pop, weights=None, k=1)3.6+有放回抽樣,支援權重,回傳列表
random.sample(pop, k)所有無放回抽樣,回傳列表,k 不得大於 len(pop)
random.randrange(start, stop, step)所有從 range 中隨機選一整數,等同 choice(range(...)) 但更快
secrets.choice(seq)3.6+密碼學安全隨機,適合產生 Token、密碼

效能提示

  • choice 內部呼叫 randrange(len(seq)) 後索引,O(1)。
  • 若序列極大且頻繁呼叫,考慮預先轉為 list 或使用 random.randrange 直接算索引。
  • 密集迴圈中可區域綁定:_choice = random.choice 避免屬性查找開銷。

常見誤區

  • 以為 choice 會修改原序列 → 不會,唯讀操作。
  • 傳入集合 set 或字典 dict → TypeError(無序、不支援索引),需先 list(s)。
  • 字串被視為字元序列,choice('abc') 回傳單一字元而非子字串。

random.choice 是最直覺的隨機選取工具,搭配 choices、sample、secrets.choice 可覆蓋從簡單抽獎到密碼學安全的各種隨機需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved