用python随机排列数组,用python随机化数组项

什么是最简单的方法用python洗牌数组?

 import random random.shuffle(array) 
 import random random.shuffle(array) 

其他的答案是最简单的,但是有点烦人的是, random.shuffle方法实际上并不返回任何东西 – 它只是对给定的列表进行sorting。 如果你想连锁调用,或者只是能够在一行中声明一个混洗数组,你可以这样做:

  import random def my_shuffle(array): random.shuffle(array) return array 

那么你可以做线路如:

  for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']): 

在处理常规的Python列表时, random.shuffle()会像前面的答案一样显示出来。

但是当它来到ndarraynumpy.array )时, random.shuffle似乎打破了原来的ndarray 。 这里是一个例子:

 import random import numpy as np import numpy.random a = np.array([1,2,3,4,5,6]) a.shape = (3,2) print a random.shuffle(a) # a will definitely be destroyed print a 

只需使用: np.random.shuffle(a)

random.shuffle一样, np.random.shufflenp.random.shuffle洗牌。

使用sklearn来做这个的另一种方法

 from sklearn.utils import shuffle X=[1,2,3] y = ['one', 'two', 'three'] X, y = shuffle(X, y, random_state=0) print(X) print(y) 

输出:

 [2, 1, 3] ['two', 'one', 'three'] 

优点:您可以在不中断映射的情况下同时随机select多个arrays。 而'random_state'可以控制重排行为的混洗。

以防万一你想要一个新的数组,你可以使用示例:

 import random new_array = random.sample( array, len(array) ) 

除了以前的回复之外,我想介绍一下另一个function。

numpy.random.shuffle以及random.shuffle执行就地洗牌。 但是,如果你想返回一个洗牌数组, numpy.random.permutation是要使用的函数。

我不知道我使用了random.shuffle()但它返回“无”给我,所以我写这个,可能对某人有帮助

 def shuffle(arr): for n in range(len(arr) - 1): rnd = random.randint(0, (len(arr) - 1)) val1 = arr[rnd] val2 = arr[rnd - 1] arr[rnd - 1] = val1 arr[rnd] = val2 return arr