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 隨機整數
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)。random.randrange 直接算索引。_choice = random.choice 避免屬性查找開銷。choice 會修改原序列 → 不會,唯讀操作。set 或字典 dict → TypeError(無序、不支援索引),需先 list(s)。choice('abc') 回傳單一字元而非子字串。random.choice 是最直覺的隨機選取工具,搭配 choices、sample、secrets.choice 可覆蓋從簡單抽獎到密碼學安全的各種隨機需求。