Quel est le moyen le plus simple de mélanger un tableau avec Python?
import random
random.shuffle(array)
import random
random.shuffle(array)
Une manière alternative de faire cela en utilisant 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)
Sortie:
[2, 1, 3]
['two', 'one', 'three']
Avantage: vous pouvez aléatoire plusieurs tableaux simultanément sans perturber le mappage. Et 'random_state' peut contrôler le brassage pour un comportement reproductible.
Les autres réponses sont les plus faciles, mais il est un peu gênant que la méthode random.shuffle
ne renvoie rien en réalité - elle trie simplement la liste donnée. Si vous voulez enchaîner des appels ou simplement pouvoir déclarer un tableau mélangé sur une ligne, vous pouvez faire:
import random
def my_shuffle(array):
random.shuffle(array)
return array
Ensuite, vous pouvez faire des lignes comme:
for suit in my_shuffle(['hearts', 'spades', 'clubs', 'diamonds']):
Lorsque vous manipulez des listes Python normales, random.shuffle()
fera le travail exactement comme le montrent les réponses précédentes.
Mais quand il s'agit de ndarray
(numpy.array
), random.shuffle
semble rompre l'original ndarray
. Voici un exemple:
import random
import numpy as np
import numpy.random
a = np.array([1,2,3,4,5,6])
a.shape = (3,2)
print a
random.shuffle(a) # a will definitely be destroyed
print a
Il suffit d'utiliser: np.random.shuffle(a)
Comme random.shuffle
, np.random.shuffle
mélange le tableau sur place.
Juste au cas où vous voudriez un nouveau tableau, vous pouvez utiliser sample
:
import random
new_array = random.sample( array, len(array) )
Vous pouvez trier votre tableau avec une clé aléatoire
sorted(array, key = lambda x: random.random())
mais ressembler à random.shuffle(array)
sera plus rapide puisqu'il écrit en C
Outre les réponses précédentes, je voudrais introduire une autre fonction.
numpy.random.shuffle
ainsi que random.shuffle
effectuent un brassage sur place. Toutefois, si vous souhaitez renvoyer un tableau mélangé, numpy.random.permutation
est la fonction à utiliser.
# arr = numpy array to shuffle
def shuffle(arr):
a = numpy.arange(len(arr))
b = numpy.empty(1)
for i in range(len(arr)):
sel = numpy.random.random_integers(0, high=len(a)-1, size=1)
b = numpy.append(b, a[sel])
a = numpy.delete(a, sel)
b = b[1:].astype(int)
return arr[b]
Je ne sais pas si j'ai utilisé random.shuffle()
mais il me renvoie "Aucun", alors j'ai écrit ceci, cela pourrait être utile à quelqu'un
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