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

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

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

x = [array]
random.shuffle(x)

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

y = shuffle(x)

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

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

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

Ответы

Ответ 1

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

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

или

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

Ответ 2

Было бы довольно просто реализовать свои собственные, используя random. Я бы написал это следующим образом:

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

Ответ 3

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

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]

Ответ 4

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

Ответ 5

Вы можете использовать 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']

Ответ 6

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

import random

x = shuffleThis(x)


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

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