python的shuffle代码是通过随机交换两个下标的值来达到洗牌的目的。
疑惑1:为什么要用倒序循环?
疑惑2:xrange中为什么不是从0开始?
疑惑3:在语句`j= _int(random() * (i+1))`中,j可以取到的最大值是i,这样岂不是达不到交换值的目的了?我的理解是`j= _int(random() * i)` ,这样保证 0<j<i 。
def shuffle(self, x, random=None):
if random is None:
random = self.random
_int = int
for i in reversed(xrange(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]
python新手先谢过大家了。
疑惑1:为什么要用倒序循环?
疑惑2:xrange中为什么不是从0开始?
疑惑3:在语句`j= _int(random() * (i+1))`中,j可以取到的最大值是i,这样岂不是达不到交换值的目的了?我的理解是`j= _int(random() * i)` ,这样保证 0<j<i 。
def shuffle(self, x, random=None):
if random is None:
random = self.random
_int = int
for i in reversed(xrange(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]
python新手先谢过大家了。