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

kiriloff Punkte 24291

Sie können sich dafür entscheiden:

>>> A = ['r','a','n','d','o','m']
>>> B = [1,2,3,4,5,6]
>>> import random
>>> random.sample(A+B, len(A+B))
[3, 'r', 4, 'n', 6, 5, 'm', 2, 1, 'a', 'o', 'd']

wenn Sie zu zwei Listen zurückkehren wollen, teilen Sie diese lange Liste in zwei.

1voto

Pogramist Punkte 35
def shuffle(_list):
    if not _list == []:
        import random
        list2 = []
        while _list != []:
            card = random.choice(_list)
            _list.remove(card)
            list2.append(card)
        while list2 != []:
            card1 = list2[0]
            list2.remove(card1)
            _list.append(card1)
        return _list

1voto

user8327014 Punkte 117

Könnten Sie eine Funktion erstellen, die eine Liste als Parameter annimmt und eine gemischte Version der Liste zurückgibt:

from random import *

def listshuffler(inputlist):
    for i in range(len(inputlist)):
        swap = randint(0,len(inputlist)-1)
        temp = inputlist[swap]
        inputlist[swap] = inputlist[i]
        inputlist[i] = temp
    return inputlist

1voto

Josh Anish Punkte 91
""" to shuffle random, set random= True """

def shuffle(x,random=False):
     shuffled = []
     ma = x
     if random == True:
         rando = [ma[i] for i in np.random.randint(0,len(ma),len(ma))]
         return rando
     if random == False:
          for i in range(len(ma)):
          ave = len(ma)//3
          if i < ave:
             shuffled.append(ma[i+ave])
          else:
             shuffled.append(ma[i-ave])    
     return shuffled

1voto

Xavier Punkte 11
import random
class a:
    foo = "bar"

a1 = a()
a2 = a()
b = [a1.foo,a2.foo]
random.shuffle(b)

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