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


当前回答

# arr = numpy array to shuffle

def shuffle(arr):
    a = numpy.arange(len(arr))
    b = numpy.empty(1)
    for i in range(len(arr)):
        sel = numpy.random.random_integers(0, high=len(a)-1, size=1)
        b = numpy.append(b, a[sel])
        a = numpy.delete(a, sel)
    b = b[1:].astype(int)
    return arr[b]

其他回答

import random
random.shuffle(array)

如果你想要一个新的数组,你可以使用sample:

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

其他的答案是最简单的,但它是有点烦人的随机。Shuffle方法实际上并不返回任何东西——它只是对给定的列表进行排序。如果你想链式调用,或者只是能够在一行中声明一个洗牌数组,你可以这样做:

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

然后你可以这样做:

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

你可以用随机键对数组排序

sorted(array, key = lambda x: random.random())

键只读取一次,所以在排序期间比较项目仍然有效。

但看起来random.shuffle(array)会更快,因为它是用C写的

顺便说一下,这是O(Nlog(N)

除了前面的回复,我想介绍另一个功能。

numpy。random。shuffle和random。进行原地洗牌。但是,如果你想返回一个打乱的数组,可以使用numpy.random.permutation函数。