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.

7voto

JonDoe Punkte 71

Print func(foo)' wird den Rückgabewert von 'func' ausgeben, wenn es mit 'foo' aufgerufen wird. Der Rückgabetyp von 'shuffle' ist jedoch None, da die Liste an Ort und Stelle geändert wird, und gibt daher nichts aus. Umgehung:

# shuffle the list in place 
random.shuffle(b)

# print it
print(b)

Wenn Sie sich mehr für funktionale Programmierung interessieren, sollten Sie die folgende Wrapper-Funktion erstellen:

def myshuffle(ls):
    random.shuffle(ls)
    return ls

5voto

malbarbo Punkte 9901

Man kann eine Funktion definieren, die shuffled (im gleichen Sinne wie bei sort gegen sorted )

def shuffled(x):
    import random
    y = x[:]
    random.shuffle(y)
    return y

x = shuffled([1, 2, 3, 4])
print x

3voto

ravi tanwar Punkte 536
import random

class a:
    foo = "bar"

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

random.shuffle(b)
print(b)

shuffle ist vorhanden, also wird das Ergebnis nicht gedruckt, das ist None sondern die Liste.

2voto

ravi tanwar Punkte 536

Sie können entweder Shuffle oder Sample verwenden, die beide aus dem Zufallsmodul stammen.

import random
def shuffle(arr1):
    n=len(arr1)
    b=random.sample(arr1,n)
    return b

OR

import random
def shuffle(arr1):
    random.shuffle(arr1)
    return arr1

2voto

Vladimir Ignatyev Punkte 1904

Für den Fall, dass Sie eine an Ort und Stelle Schlurfen und Manipulationsfähigkeit Samen Dieser Ausschnitt könnte helfen:

from random import randint

a = ['hi','world','cat','dog']
print(sorted(a, key=lambda _: randint(0, 1)))

Denken Sie daran, dass "Shuffling" eine Sortierung nach einem zufälligen Schlüssel ist.

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