Перемешать в Python

есть ли простой способ вернуть перетасованный массив в Python, а не перетасовывать его на месте?

например, вместо

x = [array]
random.shuffle(x)

Я ищу что-то вроде

y = shuffle(x)

который поддерживает x.

обратите внимание, я не ищу функцию, а не что-то вроде:

x=[array]
y=x
random.shuffle(x)

6 ответов


sorted С key функция, которая возвращает случайное значение:

import random
sorted(l, key=lambda *args: random.random())

или

import os
sorted(l, key=os.urandom)

было бы довольно просто реализовать свой собственный, используя random. Я бы написал так:--3-->

def shuffle(l):
    l2 = l[:]           #copy l into l2
    random.shuffle(l2)  #shuffle l2
    return l2           #return shuffled l2

просто напишите свой собственный.

import random

def shuffle(x):
    x = list(x)
    random.shuffle(x)
    return x

x = range(10)
y = shuffle(x)
print x # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print y # [2, 5, 0, 4, 9, 3, 6, 1, 7, 8]

нет никакой функции, которую вы ищете. Просто скопируйте список.


вы можете использовать numpy.случайность.перестановка для списка или массива, но является правильной функцией, если у вас уже есть массив numpy. Для списков со смешанными типами преобразование в массив numpy будет выполнять преобразование типов.

import numpy as np
my_list = ['foo', 'bar', 'baz', 42]
print list(np.random.permutation(my_list))
# ['bar', 'baz', '42', 'foo']

используя это в качестве демонстрации в другом месте, поэтому подумал, что стоит поделиться:

import random

x = shuffleThis(x)


def shuffleThis(y):
    random.shuffle(y)
    return(y)
#end of Shuffle Function

надеюсь, это полезно.