Wenn ich eine Python 3.8.0-Liste in eine Menge konvertiere, ist die resultierende Mengenreihenfolge * nicht trivial stark strukturiert. Wie wird diese Struktur aus der Pseudozufallsliste extrahiert?
Als Teil eines Experiments, das ich durchführe, generiere ich eine zufällige Menge. Ich war überrascht zu sehen, dass das Zeichnen des Sets plötzlich eine unerwartete lineare Struktur im Set zeigte. Es gibt also zwei Dinge, die mich verwirren: Warum hat die Konvertierung in ein festgelegtes Ergebnis eine Reihenfolge *, die diese Struktur hervorhebt? und in geringerem Maße, warum hat die Pseudozufallsmenge überhaupt diese "versteckte" Struktur?
Der Code:
X = [randrange(250) for i in range(30)]
print(X)
print(set(X))
welche Ausgänge zum Beispiel
[238, 202, 245, 94, 111, 106, 148, 164, 154, 113, 128, 10, 196, 141, 69, 38, 106, 8, 40, 53, 160, 87, 85, 13, 38, 147, 204, 50, 162, 91]
{128, 8, 10, 141, 13, 147, 148, 154, 160, 162, 164, 38, 40, 50, 53, 196, 69, 202, 204, 85, 87, 91, 94, 106, 238, 111, 113, 245}
Ein Plot ** der obigen Liste sieht erwartungsgemäß ziemlich zufällig aus:
Während das Zeichnen der Menge (wie in der Ausgabe angeordnet) die in der Menge vorhandene Struktur aufweist:
Dieses Verhalten stimmt auf meinem Computer zu 100% überein (weitere Beispiele unten) mit den im obigen Code verwendeten Werten 250 und 30 (das von mir verwendete Beispiel ist nicht von Kirschen gepflückt - es ist nur das letzte, das ich ausgeführt habe). Das Einstellen dieser Werte führt manchmal zu einer leicht unterschiedlichen Struktur (z. B. einer Teilmenge von drei arithmetischen Fortschritten *** anstelle von zwei).
Ist dies auf den Maschinen anderer Leute reproduzierbar? Natürlich scheint die Existenz einer solchen Struktur auf eine nicht so große Erzeugung von Pseudozufallszahlen hinzudeuten, aber dies erklärt nicht, wie die Konvertierung in eine Menge diese Struktur in gewissem Sinne "extrahieren" würde. Soweit mir bekannt ist, gibt es keine formale Garantie dafür, dass die Reihenfolge einer Menge (wenn sie aus einer Liste konvertiert wird) deterministisch ist (und selbst wenn dies der Fall ist, wird im Hintergrund keine ausgefeilte Reihenfolge durchgeführt). Wie passiert das?!
(*): Ich weiß, Mengen sind ungeordnete Sammlungen, aber ich meine "geordnet" in dem Sinne, dass beim Aufrufen der print
Anweisung die Menge in einer Reihenfolge ausgegeben wird , die die zugrunde liegende Mengenstruktur konsistent hervorhebt.
(**): Diese Grundstücke stammen von Wolfram Alpha. Zwei weitere Beispiele sind unten aufgeführt:
(***): Zwei Diagramme beim Ändern des Bereichs der Zufallszahlen von 250 auf 500: