一、random庫函數shuffle()
Python中的random庫提供了shuffle()函數,可以直接對列表進行隨機打亂,這種方法是最簡單易用的。
<python>
import random
list1 = [1, 2, 3, 4, 5]
random.shuffle(list1)
print(list1)
>
執行以上代碼,會輸出隨機打亂過的列表[4, 5, 3, 1, 2]。
需要注意的是,shuffle()函數直接改變了原來的列表,使用之前需要備份原來的列表。
二、sorted函數結合random庫函數random()實現
Python中sorted()函數可以將列表排序,配合random庫函數random()進行隨機排序。
<python>
import random
list1 = [1, 2, 3, 4, 5]
list2 = sorted(list1, key=lambda x: random.random())
print(list2)
>
執行以上代碼,會輸出隨機打亂過的列表,例如[1, 5, 4, 2, 3]。
在這個方法中,key參數指定了sorted()函數按照random()函數生成的隨機數進行排序,進而實現了隨機排序的效果。需要注意的是,該方法每次執行結果都會不同,具有隨機性。
三、numpy庫函數random.permutation()
numpy是Python的第三方庫,提供了很多常用的數學、科學計算函數。numpy庫中的permutation()函數可以對給定長度的序列進行隨機操作。
<python>
import numpy as np
list1 = [1, 2, 3, 4, 5]
list2 = np.random.permutation(list1)
print(list2)
>
執行以上代碼,會輸出隨機打亂過的列表,例如[5, 1, 3, 2, 4]。
需要注意的是,numpy庫中的random.permutation()函數返回的是一個新列表,原始列表不變。
四、Fisher–Yates演算法
Fisher–Yates演算法,也稱為Knuth洗牌演算法,是一種常用的隨機打亂列表的演算法。該演算法可以保證整個序列都是完全隨機的。
<python>
import random
list1 = [1, 2, 3, 4, 5]
for i in range(len(list1) - 1, 0, -1):
j = random.randint(0, i)
list1[i], list1[j] = list1[j], list1[i]
print(list1)
>
執行以上代碼,會輸出隨機打亂過的列表,例如[2, 4, 3, 5, 1]。
該演算法的原理是從最後一個數開始,隨機生成一個位置j(範圍在[0,i]),將第i個數與第j個數交換;然後將倒數第二個數進行相同的操作,以此類推,直到第一個位置。這個演算法可以保證整個序列都是完全隨機的。
五、小結
本篇文章介紹了Python實現隨機打亂列表的四種方法:使用random庫函數shuffle()、使用sorted函數結合random庫函數random()、使用numpy庫函數random.permutation()、使用Fisher–Yates演算法。可以根據實際情況選擇相應的方法,實現隨機打亂列表。
原創文章,作者:EAMF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137510.html