2016-07-23 3 views
1

Ich schreibe ein kleines Python-Programm, das eine bestimmte TV-Show simulieren wird (es ist zum Spaß Jungs ok bitte verurteile mich nicht).Wie initialisiere ich und fülle eine Liste von Listen unterschiedlicher Länge aus?

In diesem Programm versuche ich, die Kandidaten nach dem Zufallsprinzip in eine Liste von Listen zu sortieren (um eine Team Challenge nachzuahmen, wie Sie vielleicht sagen). Ich schrieb eine Funktion, die eine unsortierte Liste von Contestant-Objekten aufnehmen soll (weil ich auf das name-Attribut jedes Contestant-Objekts zugreifen möchte) und eine Liste, die Informationen über die Größen jeder einzelnen Liste in der 2D-Liste enthält Ich habe vor, am Ende zurückzukehren.

Um den zweiten Parameter weiter zu erklären, werde ich ein Beispiel geben. Nehmen wir an, die Königinnen müssen in 2 Teams zu je 5 und 6 aufgeteilt werden. Die Anzahl der Teams wird dann [5,6] sein.

Dies ist volle Funktion, die ich bisher geschrieben habe:

def sortIntoTeams(contest_obj, numTeams): 
     # where I will eventually store all the names of the individuals 
     queenList = [] 
     # creates 2D list, however, I just initialized the first subscript 
     # part, so to speak 
     teamShuffledList = len(numTeams) * [[None]] 
     # this was just a test, but I made another for loop to 
     # fill the second subscript part of the 2D list, so to speak too 
     for i in range(0, len(numTeams)): 
       count = numTeams[i] 
       teamShuffledList[i] = count * [0] 
     # for loop to fill queenList with all the names of the Queen 
     # objects in the contest_obj 
     for i in range(0, countRemaining(contest_obj)): 
       queenList.append(contest_obj[i].name) 
     # from random import shuffle, to shuffle queenList 
     shuffle(queenList) 

Nun, was ich beabsichtige, ist den teamShuffledList mit queenList zu tun füllen, aber der teamShuffledList hat Listen unterschiedlicher Länge. Gibt es eine einfache Möglichkeit, die verschiedenen Längen zu verfolgen? Jede Hilfe wäre sehr dankbar, vielen Dank.

EDIT: Obwohl es selbsterklärend ist, ist die countRemaining (contest_obj) eine andere Funktion, die ich schrieb, die nur die verbleibenden Wettbewerber Objekte in der Liste zählt.

Antwort

0
def sortIntoTeams(contest_obj, numTeams): 
    # Create a randomly-ordered copy of the contestants' names 
    random_contestants = [x.name for x in contest_obj] 
    random.shuffle(random_contestants) 
    result = [] 
    for teamsize in numTeams: 
     # Take the first <teamsize> contestants from the list 
     result.append(random_contestants[:teamsize]) 
     # Remove those contestants, since they now have a team 
     random_contestants = random_contestants[teamsize:] 
    return result 

Es ist nicht notwendig, irgendetwas zu "initialisieren".

+0

Vielen Dank! (Sorry, ich bin immer noch ein Amateur) –

0
def sortIntoTeams(contest_obj, numTeams): 
    counter = 0 
    teams = [] 
    for k in numTeams: 
     teams.append(contest_obj[counter:counter + k]) 
     counter = counter + k 
    return teams 
Verwandte Themen