version finale? ?? http://qiita.com/ttatsf/items/d4543ccc80e0fbe3891d#comment-3eccf9c112d73c505bc2
Il semble que c'est finalement devenu deux lignes (yeux blancs)
def shuffle_all_move(items):
rand_ord = random.sample(range(len(items)), k=len(items))
return [items[r] for i, r in sorted(zip(rand_ord, rand_ord[1:]+rand_ord[:1]))]
La vitesse d'exécution semble être légèrement plus rapide dans le code ci-dessus (les résultats de mesure sont affichés dans la section des commentaires).
J'aime celle faite par ttatsf dans la section commentaires. (7of9 a introduit "l'algorithme de Sattro" dans la base) Merci à tous ceux qui ont écrit le code dans les commentaires.
import random
def shuffle_all_move( items ):
length = len( items )
res = [ 0 ] * length
rand_ord = random.sample( range( length ), k=length )
for i in range( length ) :
res[ rand_ord[ i ] ] = items[ rand_ord[ ( i + 1 ) % length ] ]
return res
Vraiment élégant! Donc, je recommanderais d'utiliser ce qui précède à partir du mélange de bricolage approprié ci-dessous.
Il s'agit d'une implémentation python + numpy de shuffle qui déplace absolument les éléments (notez qu'il est supposé qu'il y a 3 éléments ou plus dans le tableau). procédure
Le groupement aléatoire de 1 est en fait réalisé en mélangeant puis en divisant le tableau en trois. Même si vous faites glisser un groupe de tableaux mélangés, cela ne sera pas pertinent par rapport à la position du tableau d'origine, de sorte que ce mélange sera restauré plus tard. Cela garantit qu'il se déplacera toujours vers une position différente de la séquence d'origine.
Ce code emprunte le code des deux pages suivantes. ※ resettable_shuffle/reset_shuffle http://qiita.com/EafT/items/9527cb30409b70106fd4 ※ divide_list http://fits.hatenablog.com/entry/2015/11/09/211012
def shuffle_all_move(_array):
array = _array.copy()
seed = random.randint(0,np.iinfo(np.int32).max)
resettable_shuffle(array,seed)
array = divide_list(array,3)
if type(array[0]) == list:
array = array[-1] + array[0] + array[1]
else:
array = np.vstack((array[-1], array[0],array[1]))
return reset_shuffle(array,seed)
Exemple d'exécution
test_array = ['a','b','c','d','e','f']
print(test_array)
test_array = shuffle_all_move(test_array)
print(test_array)
['a', 'b', 'c', 'd', 'e', 'f'] ['c', 'e', 'f', 'b', 'd', 'a']
Recommended Posts