In Mischen, bei dem sich alle Elemente bewegen (nicht an derselben Position bleiben) wurde argumentiert, dass nicht alle Muster angezeigt werden, also ich Ich habe auch ein wenig nachgedacht.
Dies ist das Problem der sogenannten [vollständigen Bestellung](https://ja.wikipedia.org/wiki/complete order) (Störungsreihenfolge, Störung).
Aufführen
import numpy as np
def derange(items):
if not isinstance(items, np.ndarray):
items = np.array(items)
index = np.arange(items.size)
rand_index = index.copy()
while 0 in index - rand_index: #Wenn es 0 enthält, ist es keine vollständige Sequenz
np.random.shuffle(rand_index)
return items[rand_index]
for i in range(100):
print(derange(range(4)))
out
[1 0 3 2]
[3 2 0 1]
[1 2 3 0]
[3 2 0 1]
[2 3 1 0]
[3 0 1 2]
[3 2 0 1]
[2 3 1 0]
[1 2 3 0]
[3 2 1 0]
[1 2 3 0]
[2 0 3 1]
[3 2 0 1]
[2 3 1 0]
[3 2 0 1]
[2 3 1 0]
[1 3 0 2]
[1 3 0 2]
[3 2 1 0]
[2 3 0 1]
[2 3 0 1]
[2 0 3 1]
[1 3 0 2]
[1 0 3 2]
[2 3 1 0]
[2 3 0 1]
[1 2 3 0]
[3 2 1 0]
[3 0 1 2]
[2 3 0 1]
[1 2 3 0]
[2 0 3 1]
[3 2 1 0]
[3 2 1 0]
[3 2 1 0]
[1 0 3 2]
[1 2 3 0]
[2 3 1 0]
[3 0 1 2]
[1 2 3 0]
[1 3 0 2]
[2 3 1 0]
[2 3 1 0]
[1 2 3 0]
[2 3 1 0]
[1 2 3 0]
[3 2 1 0]
[3 2 0 1]
[2 0 3 1]
[1 0 3 2]
[2 3 1 0]
[1 2 3 0]
[2 3 0 1]
[1 2 3 0]
[2 3 0 1]
[2 3 1 0]
[3 2 0 1]
[3 2 0 1]
[3 0 1 2]
[3 2 1 0]
[2 3 1 0]
[2 0 3 1]
[1 0 3 2]
[1 2 3 0]
[2 0 3 1]
[1 2 3 0]
[2 3 1 0]
[3 2 1 0]
[1 2 3 0]
[2 0 3 1]
[3 0 1 2]
[1 0 3 2]
[3 0 1 2]
[3 2 1 0]
[1 0 3 2]
[3 2 0 1]
[2 3 0 1]
[2 3 1 0]
[2 3 1 0]
[2 3 1 0]
[1 0 3 2]
[3 2 0 1]
[1 0 3 2]
[1 2 3 0]
[1 0 3 2]
[2 3 1 0]
[1 0 3 2]
[1 2 3 0]
[1 2 3 0]
[2 3 1 0]
[3 0 1 2]
[3 0 1 2]
[3 2 1 0]
[3 0 1 2]
[2 0 3 1]
[1 2 3 0]
[1 3 0 2]
[2 3 1 0]
[2 3 0 1]
[3 0 1 2]
Ich konnte auch "[1, 0, 3, 2]" bestätigen.
Das erste, was ich mir ausgedacht habe, war das obige, aber ich habe auch an die folgende Methode gedacht. Die Ausführungsgeschwindigkeit war jedoch langsam, so dass ich starb.
Mit einem konkreten Beispiel erklären
Recommended Posts