Durchlauf verschachtelte For-Schleife

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
LisaF
User
Beiträge: 10
Registriert: Sonntag 20. Januar 2019, 17:04

Hey Leute,

kann mir jemand den genauen Durchlauf des folgenden Codes erklären?

Code: Alles auswählen

personen = ["jan", "peter", "horst"]
präferenz = {"jan": ["AI", "ITS", "Mathe"],
            "peter": ["ITS", "ET", "Physik"],
            "horst": ["Physik", "Mathe", "Chemie"]}
noten =     {"jan": ["1", "1", "2"],
            "peter": ["3", "2", "2"],
            "horst": ["3", "2", "1"]}

personen_dict = {pers: [(fach, note) for fach, note in
                        zip(präferenz[pers], noten[pers])]
                        for pers in personen}

for person, daten in personen_dict.items():
    print("Student: ", person)
    for fach in daten:
        print("Fach: ", fach[0], "Note: ", fach[1])
Wo fängt der Computer hier genau an und welche Befehle folgen dann? Bzw. was wird hier zuerst in welche for Schleife geschrieben? Denn die Angabe, die auf jeden Fall benötigt wird pers in Personen befindet sich ja erst am Ende der Schleife. Mir geht es hauptsächlich um den mittleren Abschnitt, sprich:

Code: Alles auswählen

personen_dict = {pers: [(fach, note) for fach, note in
                        zip(präferenz[pers], noten[pers])]
                        for pers in personen}
Vielen Dank für jede Hilfe
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Was Du da hast ist eine verschachtelte Dict-Comprehension mit einer List-Comprehension: https://docs.python.org/3/tutorial/data ... rehensions
Wobei die innere Schleife überflüssig ist:

Code: Alles auswählen

personen_mit_präferenzen_und_noten = {
    person: list(zip(präferenz[person], noten[person]))
    for person in personen
}
Antworten