2025年5月8日
怎么做到随机?
给你一个数组,请你写个函数,随机打乱它的顺序,要求每一种排列出现的概率相同。
随机选择两个位置,交换它们的位置能做到真正的随机吗?
Knuth Shuffle(也被称为 Fisher–Yates Shuffle)是这样实现的
import random
def knuth_shuffle(arr):
for i in range(n - 1, 0, -1):
j = random.randint(0, i)
arr[i], arr[j] = arr[j], arr[i]在这个算法中将每一个位置的数据考虑到了,使用random随机生成前面位置的下标,将当前数据与其交换,从而实现了公平的洗牌算法。
Python中有很多针对不同场景的洗牌方法,比如Python内置函数random的shuffle,支持多维数组的numpy的shuffle方法,以及数据分析和科学计算常用的pandas的sample方法