endgültige Version? ?? http://qiita.com/ttatsf/items/d4543ccc80e0fbe3891d#comment-3eccf9c112d73c505bc2
Es scheint, dass es schließlich zwei Linien (weiße Augen) wurde
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]))]
Die Ausführungsgeschwindigkeit scheint für den obigen Code etwas schneller zu sein (Messergebnisse werden im Kommentarbereich veröffentlicht).
Ich mag die von ttatsf im Kommentarbereich. (7of9 führte die Basis "Sattro's Algorithmus" ein) Vielen Dank an alle, die den Code in den Kommentaren geschrieben haben.
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
Wirklich elegant! Daher würde ich empfehlen, das oben genannte aus dem entsprechenden DIY-Shuffle unten zu verwenden.
Es ist eine Python + Numpy-Implementierung von Shuffle, die Elemente absolut verschiebt (beachten Sie, dass angenommen wird, dass das Array 3 oder mehr Elemente enthält). Verfahren
Eine zufällige Gruppenteilung von 1 wird tatsächlich durch Mischen und anschließendes Teilen des Arrays in drei realisiert. Selbst wenn Sie eine Gruppe gemischter Arrays verschieben, ist dies für die Position des ursprünglichen Arrays irrelevant, sodass diese Zufallswiedergabe später wiederhergestellt wird. Dies garantiert, dass es sich immer an eine andere Position als die ursprüngliche Sequenz bewegt.
Dieser Code leiht den Code auf den folgenden zwei Seiten aus. ※ 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)
Ausführungsbeispiel
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