Ответ 1
sorted
с функцией key
, которая возвращает случайное значение:
import random
sorted(l, key=lambda *args: random.random())
или
import os
sorted(l, key=os.urandom)
Есть ли простой способ RETURN перетасовать массив в Python, а не перетасовывать его на месте?
например, вместо
x = [array]
random.shuffle(x)
Я ищу что-то вроде
y = shuffle(x)
который поддерживает x.
Заметьте, я не ищу функцию, а не что-то вроде:
x=[array]
y=x
random.shuffle(x)
sorted
с функцией key
, которая возвращает случайное значение:
import random
sorted(l, key=lambda *args: random.random())
или
import os
sorted(l, key=os.urandom)
Было бы довольно просто реализовать свои собственные, используя random
. Я бы написал это следующим образом:
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.random.permutation для списка или массива, но это правильная функция, если у вас уже есть массив 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
Надеюсь, это полезно.