要实现打乱给定列表的函数,并确保所有排列的概率相等,可以使用Fisher-Yates算法。以下是一个示例代码:
import random
def shuffle_list(lst):
# 从最后一个元素开始,依次将当前元素与它之前的一个随机位置的元素交换
for i in range(len(lst)-1, 0, -1):
j = random.randint(0, i) # 随机选择一个位置
lst[i], lst[j] = lst[j], lst[i] # 交换位置
return lst
# 测试
my_list = [1, 2, 3, 4, 5]
shuffled_list = shuffle_list(my_list)
print(shuffled_list)
这个函数使用random模块中的randint函数来生成一个随机整数,然后将当前元素与随机位置的元素进行交换。通过从最后一个元素开始,每次减小交换的范围,确保了所有排列的概率相等。最后返回打乱的列表。
运行上述代码,将得到类似以下的输出结果:
[2, 3, 5, 4, 1]
注意,由于打乱的结果是随机的,每次运行结果可能会有所不同。