在數(shù)據(jù)處理和算法設(shè)計(jì)中,打亂 List 的順序是一個(gè)常見操作。這不僅可以用于數(shù)據(jù)隨機(jī)化,還可以用于測(cè)試和驗(yàn)證算法的魯棒性。本文將詳細(xì)介紹如何在 Python 中打亂一個(gè) List 的順序,包括各種方法及其適用場(chǎng)景。
Python 的 random 模塊提供了一個(gè)直接有效的方式來打亂 List 的順序。random.shuffle() 函數(shù)可以原地打亂一個(gè) List。
import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)
import random
my_list = [1, 2, 3, 4, 5]
random.shuffle(my_list)
print(my_list)
如果你希望生成一個(gè)新的打亂順序的 List,而不是原地修改,可以使用 random.sample() 方法。
import random
my_list = [1, 2, 3, 4, 5]
shuffled_list = random.sample(my_list, len(my_list))
print(shuffled_list)
import random
my_list = [1, 2, 3, 4, 5]
shuffled_list = random.sample(my_list, len(my_list))
print(shuffled_list)
對(duì)于數(shù)值計(jì)算和大數(shù)據(jù)處理,NumPy 庫提供的函數(shù)可能更為高效。可以使用 numpy.random.shuffle() 來打亂數(shù)組數(shù)據(jù)。
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
np.random.shuffle(my_array)
print(my_array)
import numpy as np
my_array = np.array([1, 2, 3, 4, 5])
np.random.shuffle(my_array)
print(my_array)
除了使用內(nèi)置的方法外,還可以通過實(shí)現(xiàn) Fisher-Yates 洗牌算法來自定義打亂 List 的方式。
def shuffle_list(original_list):
list_copy = original_list[:]
n = len(list_copy)
for i in range(n - 1, 0, -1):
j = random.randint(0, i)
list_copy[i], list_copy[j] = list_copy[j], list_copy[i]
return list_copy
my_list = [1, 2, 3, 4, 5]
shuffled_list = shuffle_list(my_list)
print(shuffled_list)
import random
def shuffle_list(original_list):
list_copy = original_list[:]
n = len(list_copy)
for i in range(n - 1, 0, -1):
j = random.randint(0, i)
list_copy[i], list_copy[j] = list_copy[j], list_copy[i]
return list_copy
my_list = [1, 2, 3, 4, 5]
shuffled_list = shuffle_list(my_list)
print(shuffled_list)
random.seed(42)
random_list = random.sample(range(100), 10)
unique_list = list(set(my_list))
綜上所述,Python 提供了多種方法來打亂 List 的順序。選擇適合的方法可以提高代碼的可讀性和運(yùn)行效率。無論是使用內(nèi)置的 random 模塊,還是針對(duì)特定需求自定義算法,都能夠有效實(shí)現(xiàn) List 的隨機(jī)化。希望本文能幫助你更好地利用 Python 進(jìn)行數(shù)據(jù)處理和算法設(shè)計(jì)。
]]>