Wie benutze ich random.shuffle () für einen Generator? Python

8

Wie verwende ich random.shuffle () für einen Generator, ohne eine Liste vom Generator zu initialisieren? Ist das überhaupt möglich? Wenn nicht, wie sonst sollte ich random.shuffle() auf meiner Liste verwenden?

%Vor%

Hinweis: random.seed() wurde so entworfen, dass es nach jedem Skriptlauf dieselbe Ausgabe zurückgibt?

    
alvas 17.01.2014, 13:22
quelle

2 Antworten

21

Um die Sequenz gleichmäßig zu mischen, muss random.shuffle() wissen, wie lang die Eingabe ist. Ein Generator kann dies nicht bereitstellen; Sie haben , um es in eine Liste zu materialisieren:

%Vor%

Sie könnten stattdessen sorted() mit random.random() als Schlüssel verwenden:

%Vor%

aber da auch eine Liste erzeugt, ist es wenig sinnvoll, diese Route zu gehen.

Demo:

%Vor%     
Martijn Pieters 17.01.2014, 13:26
quelle
2

Es ist nicht möglich, die Ausbeute eines Generators zufällig zu bestimmen, ohne alle Elemente irgendwo zwischenzuspeichern. Zum Glück ist das in Python ziemlich einfach:

%Vor%

Beachten Sie den Aufruf von list() , der alle Elemente liest und sie in eine Liste einfügt.

Wenn Sie nicht alle Elemente speichern wollen oder können, müssen Sie den Generator in zufälliger Reihenfolge ändern.

    
Aaron Digulla 17.01.2014 13:26
quelle