iterationschritte einer liste

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
MathGenie123
User
Beiträge: 43
Registriert: Montag 18. April 2022, 13:13

meine frage wäre was genau dieser code macht bzw. wie wird hier iteriert ?

Code: Alles auswählen

attributes_by_class = [[data[:,i][data[:,0] == c]
                        for c in (1,2,3)]
                       for i in range(1,14)]
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist eine List-Comprehension, zwei ineinander verschachtelte um genauer zu sein.
MathGenie123
User
Beiträge: 43
Registriert: Montag 18. April 2022, 13:13

wie wird denn dort iteriert ?
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Um das zu verstehen, hilft dir vielleicht, die list comprehensions (eine oder beide) auflösen. Ich löse mal die äußere auf:

Code: Alles auswählen

attributes_by_class = []
for i in range(1, 14):
    attributes_by_class.append(
        [data[:, i][data[:, 0] == c] for c in (1, 2, 3)]
    )
MathGenie123
User
Beiträge: 43
Registriert: Montag 18. April 2022, 13:13

wie kommt man darauf dass die iteration von 1-14 als die äußere schleife gilt ? müsste sie nicht die innere schleife sein ?
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Vielleicht helfen auch einfach sinnvolle Zeilenumbrüche:

Code: Alles auswählen

attributes_by_class = [
    [
        data[data[:,0] == c, i]
        for c in (1,2,3)
    ]
    for i in range(1,14)
]
Wenn man über Indices eines numpy-Arrays macht man meist was falsch.
So ist das Format etwas anders, sollte aber eh besser sein:

Code: Alles auswählen

attributes_by_class = [
    data[data[:, 0] == c, 1:]
    for c in (1,2,3)
]
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

MathGenie123 hat geschrieben: Freitag 17. Juni 2022, 10:13 wie kommt man darauf dass die iteration von 1-14 als die äußere schleife gilt ? müsste sie nicht die innere schleife sein ?
Weil es die äußere der beiden list comprehensions ist.

Nicht verwechseln mit einer list comprehension mit zwei for-Schleifen drin, das ist etwas anderers.

Oder vielleicht musst du einfach nochmal nachlesen, wie list comprehension funktionieren.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da kommt man drauf, wenn man sich mal die Dokumentation zu dem Sprachfeature durchliest. Hast du das mal gemacht?
MathGenie123
User
Beiträge: 43
Registriert: Montag 18. April 2022, 13:13

nein, ich bin java programmer und bin neu umgestiegen
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja und, mit dem Hinweis "das ist folgendes Feature" kann's doch losgehen?
Antworten