Problem:
Das Ändern einer Liste während einer Python-for-Schleife wird im Allgemeinen nicht empfohlen. Was aber, wenn Sie die Zeichenfolgen innerhalb einer Liste ändern müssen? Zählt das Ersetzen dieser veränderlichen Werte als verbotene Änderung?
Antwort:
Solange Sie Elemente in der Liste ändern, die bereits durchlaufen wurden, wird dies berücksichtigt akzeptabel. Zum Beispiel:
a = ['a',' b', 'c ', ' d '] for i, s in enumerate(a): a[i] = s.strip() print(a) # -> ['a', 'b', 'c', 'd']
Dieser Code durchläuft die Liste a und entfernt Leerzeichen aus jeder Zeichenfolge. Dies geschieht, ohne eine neue Liste zu erstellen und diese dem Original zuzuordnen.
Es ist jedoch riskant, die Anzahl der Elemente in der Liste während der Iteration zu ändern. Zum Beispiel:
b = ['a', ' b', 'c ', ' d '] for i, s in enumerate(b): if s.strip() != b[i]: # leading or trailing whitespace? del b[i] print(b) # -> ['a', 'c '] # WRONG!
Dieser Code versucht, Elemente mit führenden oder nachgestellten Leerzeichen aus Liste b zu löschen. Leider schlägt dies fehl, da das Löschen von Elementen die Indizierung nachfolgender Iterationen stört.
Achtung:
Es ist wichtig zu beachten, dass Sie Elemente in einer Liste zwar wie beschrieben sicher ändern können Jeder Versuch, die Anzahl der Elemente zu erhöhen oder zu verringern, kann zu fehlerhaftem Verhalten führen.
In-Place Löschen:
Wenn Sie Einträge während der Iteration effektiv löschen möchten, verwenden Sie Listenverständnis:
b = ['a',' b', 'c ', ' d '] b[:] = [entry for entry in b if entry.strip() == entry] print(b) # -> ['a'] # CORRECT
Dieser Code erstellt eine neue Liste, die nur die Einträge ohne führende oder nachfolgende Leerzeichen enthält , wodurch die unerwünschten Elemente effektiv „an Ort und Stelle“ entfernt werden.
Das obige ist der detaillierte Inhalt vonWie kann ich Zeichenfolgen innerhalb einer Liste während der Iteration in Python sicher ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!