kostenloser Webspace werbefrei: lima-city


Kontrollfluss mit break, Iteration über variable Listen

lima-cityForumProgrammiersprachenPython

  1. Autor dieses Themas

    sonzai

    sonzai hat kostenlosen Webspace.

    Hi,

    ich hätte da gerade ein paar Python Fragen:

    1: Ist es möglich, wenn man eine Schleife mit break abbricht, nach der break Anweisung noch etwas auszuführen?

    for i in range(5):
        if i == 3:
            break
            print("hi")


    Wenn ich das so mache, möchte ich, dass nach break noch "hi" ausgegeben wird (nur ein Beispiel). Wird aber nicht. Das heißt man muss das ganze jetzt nach der Schleife schreiben?

    2: Ich habe eine Liste, deren Länge sich während der Ausführung verändert. Das heißt anfangs sind beispielsweise 5 Einträge vorhanden, während am Ende es derer nur noch 3 sind. In meinem Code gehe ich mit einer for Schleife durch diese Liste mit for i in range(len(MeineListe)). Wie kann ich verhindern, dass die for Schleife weiter ausgeführt wird, obwohl sich die Länge der Liste verändert hat, also dass die Ausführung am Ende sozusagen ins Leere läuft, sondern dass die Schleife nur so oft ausgeführt wird, wie sie wirklich aktuell lang ist? Ich weiß nicht wie ich das anders erklären soll, aber wenn mein Array 5 Felder lang ist am Start, wird die Schleife 5mal ausgeführt und wenn mittendrinnen die letzten beiden Einträge aus dem Array gelöscht werden, darf der nur noch maximal 3 mal ausgeführt werden. Wie geht das?

    3: Wenn in einem Array Einträge gespeichert sind, die Klassen sind und auf die somit über MeinArray.Klassenattribut zugegriffen werden kann, wie kann ich dann rausfinden bei welchem i das Klassenattribut x vorzufinden ist? Also beispielsweise ich möchte rausfinden welches i die ID 4 hat bei: Liste.ID. Muss ich dann einfach mit einer for Schleife drüber gehen? Das ist doch total umständlich:

    for i in Liste:
        if Liste[i].ID == 4:
            break


    Geht das nicht auch eleganter?

    Danke!


    Beitrag zuletzt geändert: 2.7.2011 4:32:27 von sonzai
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sonzai schrieb:
    1: Ist es möglich, wenn man eine Schleife mit break abbricht, nach der break Anweisung noch etwas auszuführen?

    for i in range(5):
        if i == 3:
            break
            print("hi")


    Wie wäre es damit?
    for i in range(5):
        if i == 3:
            print("hi")
            break




    2: Ich habe eine Liste, deren Länge sich während der Ausführung verändert. Das heißt anfangs sind beispielsweise 5 Einträge vorhanden, während am Ende es derer nur noch 3 sind.

    So etwas solte man nicht machen, da es unsicher ist über einen sich veränderlichen Container zu iterieren.

    Um das ganze abzusichern, solltest du nicht mit ranges, sondern einer einfacher Zählvariable in einer while-Schleife arbeiten:
    i = 0
    while i < len( meineListe )
        tuEtwas( meineListe[ i ]
        i+= 1




    3: Wenn in einem Array Einträge gespeichert sind, die Klassen sind und auf die somit über MeinArray.Klassenattribut zugegriffen werden kann, wie kann ich dann rausfinden bei welchem i das Klassenattribut x vorzufinden ist? Also beispielsweise ich möchte rausfinden welches i die ID 4 hat bei: Liste.ID. Muss ich dann einfach mit einer for Schleife drüber gehen? Das ist doch total umständlich:

    Haben denn alle Objekte in deiner Liste den gleichen Klassentyp? Wenn ja, dann kriegst du das ganze so raus:

    [ i for i in range( len( meineListe ) ) if meineListe[ i ].ID == 4 ]



    for i in Liste:
        if Liste[i].ID == 4:
            break


    Geht das nicht auch eleganter?

    Die Variante mit for würde ich jetzt nicht umbedingt als nicht-elegant bezeichnen. Zumindest ist sofort klar, was gemeint ist. Bei der List-Comprehension oben braucht man schon länger, um zu verstehen, was da los ist.

    Je nach Anwendungsfall könnte sich aber auch
    filter( lambda x: x.ID == 4, meineListe )

    anbieten, wenn du nicht am Listenindex interessiert bist, sondern an dem Objekt, dass die entsprechende ID hat.

    Beitrag zuletzt geändert: 2.7.2011 8:26:06 von bladehunter
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!