Heim >Backend-Entwicklung >Python-Tutorial >Ist das Ändern von Listeneinträgen während der Iteration sicher und wie kann ich es richtig machen?

Ist das Ändern von Listeneinträgen während der Iteration sicher und wie kann ich es richtig machen?

DDD
DDDOriginal
2024-12-18 16:08:15674Durchsuche

Is Modifying List Entries During Iteration Safe, and How Can I Do It Correctly?

Ä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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn