shuffle函数中随机选择位置交换的原理是什么

What is the principle of randomly selecting positions to swap in the shuffle function

Fisher–Yates shuffle 的意思是我们每次从选中的segment中取出最后一个数字和之前随机选择的数字交换,不断迭代,最终实现官方Shuffle中的随机shuffling.The代码python3.6如下

     _int = int
     for i in reversed(range(1, len(x))):
          # pick an element in x[:i+1] with which to exchange x[i]
          j = _int(random() * (i+1))
          x[i], x[j] = x[j], x[i]

为什么不选择全球位置并交换?

random()[0, 1) 范围内的浮点数。当您将其乘以 i+1 时,您会得到一个 [0, i+1) 范围内的浮点数。当您将其转换为整数时,您会得到一个 [0, i].

范围内的整数

当然,你可以只使用random.randint(0, i)。而reverse(range(1, len(x))可以简化为range(len(x)-1, 0, -1).