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


当前回答

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

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

然后你可以这样做:

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

其他回答

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

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

然后你可以这样做:

    for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
import random
random.shuffle(array)
import random
random.shuffle(array)

另一种方法是使用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']

优点:可以同时随机多个数组,而不会中断映射。'random_state'可以控制可复制行为的变换。

我不知道我使用了random。shuffle(),但它返回'None'给我,所以我写了这个,可能对别人有帮助

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