在 Python 中的列表中隨機播放元素

商業

如果要在 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]