Heim >Backend-Entwicklung >Python-Tutorial >Ist das Ändern von Listeneinträgen während der Iteration sicher und wie kann ich es richtig machen?
Ändern von Listeneinträgen während der Schleifeniteration
Es ist im Allgemeinen nicht ratsam, eine Liste während der iterativen Schleife zu ändern. Wenn man jedoch mit Listen von Zeichenfolgen arbeitet, die eine Zeichenfolgenbearbeitung erfordern, kann man sich fragen, ob das Ersetzen der Zeichenfolgen innerhalb der Liste eine Änderung darstellt.
Ist eine In-Place-Value-Mutation-Änderung?
Der folgende Ansatz gilt als akzeptabel, da er Elemente nach ihrer Verarbeitung ändert:
a = ['a', ' b', 'c ', ' d '] for i, s in enumerate(a): a[i] = s.strip() print(a) # ['a', 'b', 'c', 'd']
Vergleichen Sie dies mit dem Folgenden Ansatz:
a[:] = [s.strip() for s in a]
Letzteres erfordert das Erstellen und Zuweisen einer temporären Liste, was im Vergleich zur direkten Änderung rechenintensiv sein kann.
Achtung: Länge wird aktualisiert
Während eine direkte Wertmutation zulässig ist, kann eine Änderung der Länge der Liste zu Problemen führen. Das Löschen von Elementen während der Iteration kann beispielsweise zu einer falschen Indizierung führen:
b = ['a', ' b', 'c ', ' d '] for i, s in enumerate(b): if s.strip() != b[i]: # Check for whitespace del b[i] print(b) # ['a', 'c '] # Incorrect result
Effektives Löschen während der Schleife
Um Einträge während der Iteration effektiv an Ort und Stelle zu löschen, sollten Sie Folgendes in Betracht ziehen Der folgende Ansatz:
b = ['a', ' b', 'c ', ' d '] b[:] = [entry for entry in b if entry.strip() == entry] print(b) # ['a'] # Correct result
Zusammenfassend lässt sich sagen, dass es zwar möglich ist, Listeneinträge während einer for-Schleife durch den In-Place-Wert zu ändern Aufgrund einer Mutation ist es wichtig, beim Ändern der Listenlänge Vorsicht walten zu lassen, um unerwartete Folgen zu vermeiden. Insbesondere das Löschen von Einträgen erfordert eine besondere Behandlung, um die Integrität der Iteration aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonIst das Ändern von Listeneinträgen während der Iteration sicher und wie kann ich es richtig machen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!