938 Stimmen

Mischen einer Liste von Objekten

Ich habe eine Liste von Objekten und möchte sie mischen. Ich dachte, ich könnte die random.shuffle Methode, aber das scheint zu scheitern, wenn die Liste aus Objekten besteht. Gibt es eine Methode zum Mischen von Objekten oder eine andere Möglichkeit, dies zu umgehen?

import random

class A:
    foo = "bar"

a1 = a()
a2 = a()
b = [a1, a2]

print(random.shuffle(b))

Dies wird scheitern.

1voto

user3298224 Punkte 21

Vergewissern Sie sich, dass Sie Ihre Quelldatei nicht random.py nennen und dass sich in Ihrem Arbeitsverzeichnis keine Datei namens random.pyc befindet. Beides könnte dazu führen, dass Ihr Programm versucht, Ihre lokale random.py-Datei anstelle des Python-Moduls random zu importieren.

0voto

Gatsby Punkte 21

Die Umstellung erfolgt "mit Ersatz". Daher kann sich das Vorkommen der einzelnen Punkte ändern! Zumindest dann, wenn die Einträge in Ihrer Liste auch aufgelistet sind.

Z.B.,

ml = [[0], [1]] * 10

Danach,

random.shuffle(ml)

Die Anzahl der [0] kann 9 oder 8 sein, aber nicht genau 10.

0voto

Enber Punkte 13

Plan: Schreiben Sie den Shuffle aus, ohne sich auf eine Bibliothek zu verlassen, die die schwere Arbeit übernimmt. Beispiel: Gehe die Liste von Anfang an durch, beginnend mit Element 0; finde eine neue zufällige Position dafür, sagen wir 6, setze den Wert von 0 auf 6 und den Wert von 6 auf 0. Gehe weiter zu Element 1 und wiederhole diesen Vorgang, und so weiter durch den Rest der Liste

import random
iteration = random.randint(2, 100)
temp_var = 0
while iteration > 0:

    for i in range(1, len(my_list)): # have to use range with len()
        for j in range(1, len(my_list) - i):
            # Using temp_var as my place holder so I don't lose values
            temp_var = my_list[i]
            my_list[i] = my_list[j]
            my_list[j] = temp_var

        iteration -= 1

-1voto

Stefan Gruenwald Punkte 2482

Es funktioniert gut. Ich versuche es hier mit Funktionen als Listenobjekte:

    from random import shuffle

    def foo1():
        print "foo1",

    def foo2():
        print "foo2",

    def foo3():
        print "foo3",

    A=[foo1,foo2,foo3]

    for x in A:
        x()

    print "\r"

    shuffle(A)
    for y in A:
        y()

Er druckt aus: foo1 foo2 foo3 foo2 foo3 foo1 (die foos in der letzten Zeile haben eine zufällige Reihenfolge)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X