如果要在 Python 中對列表(數組)的元素進行隨機排序(隨機排序),請使用標準庫的 random 模塊。
有兩個函數:shuffle(),對原始列表進行隨機排序,sample(),返回一個新的隨機排序列表。 sample() 可用於字符串和元組。
- 隨機播放原始列表:
random.shuffle()
- 生成一個新的隨機列表。:
random.sample()
- 隨機播放字符串和元組
- 修復隨機數種子
如果要按升序或降序而不是隨機或倒序排序,請參閱以下文章。
隨機播放原始列表:random.shuffle()
random 模塊中的函數 shuffle() 可以對原始列表進行隨機排序。
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
生成一個新的隨機列表。:random.sample()
random 模塊中的函數 sample() 可用於創建一個隨機排序的新列表,而無需更改原始列表。
sample() 是一個從列表中隨機選擇和檢索元素的函數。第一個參數是一個列表,第二個參數是要檢索的元素數。有關詳細信息,請參閱以下文章。
如果 sample() 選擇的元素個數是列表中元素的總數,我們得到一個所有元素隨機排序的新列表。列表中的元素總數由 len() 獲得。
原始對像不會改變。
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]
print(l)
# [0, 1, 2, 3, 4]
隨機播放字符串和元組
字符串和元組是不可變的,所以如果你使用 random.shuffle() 改變原始對象,你會得到以下錯誤。TypeError
s = 'abcde'
# random.shuffle(s)
# TypeError: 'str' object does not support item assignment
t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)
# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment
如果你想打亂一個字符串或元組,使用 random.sample(),它會創建一個新對象。
即使將字符串或元組指定為參數,random.sample() 也會返回一個列表,因此有必要將其處理回字符串或元組。
在字符串的情況下,它將是一個一個字符的列表。要將它們再次連接成單個字符串,請使用 join() 方法。
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
對於元組,使用 tuple(),它從列表中創建一個元組。
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
修復隨機數種子
通過給隨機模塊的函數seed() 提供一個任意整數,可以固定隨機數種子並且可以初始化隨機數生成器。
用相同的種子初始化後,總是以相同的方式重新排序。
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]