Перемешать в 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
надеюсь, это полезно.