So erzeugen Sie eine Reihe von Zufallszahlen in python-ohne Wiederholung
Ich möchte Zufallszahlen im Bereich (0..."MAX"). Ich würde gerne eine Schleife, die jedes mal durch die Schleife eine neue eindeutige Zufallszahl generiert wird (sollte sich nicht wiederholen). Die Schleife wird weiterhin eine insgesamt "MAX" - Zeiten. Es sollte "MAX" Anzahl der Zufallszahlen generiert in Summe. Wenn sortiert, die Werte sollten 0..."MAX"; keine Wiederholung.
Einschränkungen:
- Übernahme der MAX ist viel größer als int. (kein Speicher zum speichern der Anzahl Permutationen in Erinnerung)
Meine vorgeschlagene Lösung:
Wenn ich Samen des Generators von 0...MAX wäre, die mir erlauben, zu drucken jede eindeutige Zahl zwischen 0 und MAX, wie in der unten-Funktion? Angenommen es ist kein Speicherplatz zum speichern aller Nummern und mischen Sie Sie.
for x in range (0, MAX):
random.seed(x)
num=random.randint(0, MAX)
print("seed = ",x, " random number = ", num)
Wenn die Antwort ist, ja, dann würde diese generation reversibel sein (bekomme ich das Saatgut aus der Zufallszahl)? In dem Fall würde dies als eine Art Chiffre, die, wenn die Samen (Schlüssel) und die Strecke ist die gleiche Länge?
randint
Argumente erfordert. Auch nichts in deinem code wird verhindert Wiederholungen. Warum sind Sie das seeding der generator von neuem bei jeder iteration?Tnx. Behoben. Ich möchte eine neue Zufallszahl im Bereich von 0...Max, die für jede iteration und muss es nicht wiederholen Sie mit den früheren zahlen. Ich bin seeding es, weil ich vermute, dass eine eindeutige Saatgut ist eine eindeutige Nummer für die erste iteration der PRG, aber ich weiß nicht, was ist die max seed prg dauern würde, bevor Sie zu wiederholen. Angenommen es ist kein Speicher zum speichern von alle zahlen.
"als eine Art block cipher" - wenn Sie planen, verwenden Sie diese für jede Art von kryptographischen Zweck, nicht.
es einfach benutzen zu generieren, nicht wiederholen random aber neugierig, ob es passen Sie die Beschreibung für eine block-Chiffre.
Welche Anforderungen haben Sie für die "Zufälligkeit"? Muss es sein, gut genug für Simulationen? Kryptographie? Tut es, musst es nur einmalig auftretenden? Wie groß ist
MAX
?InformationsquelleAutor user1144251 | 2014-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem random-Modul hat eine Probe-Funktion, die beruht auf der Herstellung von
unique elements
. Es wird verwendet, wie im folgenden Beispiel:Aber, sich bewusst sein, dass es eine Ausnahme werfen, wenn die Länge der Liste größer ist als die Größe der Bevölkerung, z.B.
ValueError
. Warum denken Sie es wiederholen würde?Auch können Sie nicht Probe aus
5
.Sie sind auf der Suche für die
random.shuffle
, wie ich gezeigt habe, in meiner Antwort.Dies funktioniert gut für einen kleinen Satz. Aber für eine große Anzahl funktioniert es nicht, sprich: ist zufällig.sample(range(78364164095),78364164095)
InformationsquelleAutor hd1
Können Sie dies so tun:
mit in der range von x und y wird es wählen Sie einige zufällige Werte. W/o-Wiederholung bedeutet, können Sie verwenden. also ich bin das hinzufügen dieser Werte zu setzen.
nur einen try this one.
InformationsquelleAutor Cooldharma06
Wenn Sie wollen, bekommen alle Nummern in einem bestimmten Bereich,
entweder haben wir zum speichern der Zufallszahlen erzeugt, und vergleichen Sie Sie gegen die neu generierten Zufallszahl
oder können wir generieren der Liste aus, und mische es so
da Sie bereits über die Bevölkerung als Liste
random.shuffle
ist ein in-place-operation wird das Ergebnis nicht gespeichert werden in einer separaten Liste.Dann wie sind Sie zum generieren der Zufallszahlen und speichern?
Erste Weg sollte die Verwendung von set, nicht Liste. Liste (vector) braucht O(N) Zeit zu finden, wenn es ein Element ist, während es für hash-basierte set-es ist O(1) (im Durchschnitt).
hash-Werte von zahlen zwischen -5 bis 256 sind die gleichen wie die zahlen selbst. Also, was auch immer die Reihenfolge festgelegt wird, haben Sie in der sortierten Reihenfolge. So können wir nicht verwenden
set
hier.nicht das speichern der Zufallszahl, die nur drucken Sie es aus (streaming) keine Speicherung.
InformationsquelleAutor thefourtheye