Falsche Schleife beim Entfernen von Elementen aus Listen
Beim Durchlaufen einer Liste und Entfernen von Elementen innerhalb der Schleife kann es zu unerwartetem Verhalten kommen. Betrachten Sie den folgenden Code:
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
Anstatt wie erwartet alle Elemente zu entfernen, führt dieser Code zu der folgenden Ausgabe:
['b', 'd', 'f', 'h', 'j', 'l']
Dieses scheinbar seltsame Verhalten wird durch die Python-Dokumentation erklärt:
Es ist nicht sicher, die Sequenz zu ändern, über die in der Schleife iteriert wird. Wenn Sie die Liste, über die Sie iterieren, ändern müssen, müssen Sie über eine Kopie iterieren.
In diesem speziellen Fall wird die Iterationsvariable i nach dem Entfernen eines Elements aktualisiert, wodurch der Index des nächsten Elements verursacht wird Die Schleife muss übersprungen werden.
Umschreiben für genaues Entfernen von Elementen
Um dieses Verhalten zu korrigieren, sollten Sie eine Kopie der Liste durchlaufen oder alternative Methoden zum Entfernen von Elementen verwenden . Hier gibt es drei Möglichkeiten:
<code class="python">del letters[:]</code>
<code class="python">letters[:] = []</code>
<code class="python">letters = []</code>
Alternativ, wenn Sie bestimmte Elemente entfernen müssen Elemente basierend auf einer Bedingung können Sie die Liste mithilfe einer Comprehension-Funktion oder der Funktion filter() filtern:
<code class="python">letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]</code>
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
Durch Befolgen dieser Richtlinien können Sie eine genaue und effiziente Entfernung von Elementen aus Listen in Python sicherstellen .
Das obige ist der detaillierte Inhalt vonWie gehe ich mit unerwartetem Verhalten um, wenn Elemente mithilfe von Schleifen aus Listen entfernt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!