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:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
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:
[I]t ist nicht sicher, die Sequenz zu ändern, über die in iteriert wird Schleife. 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, was den Index des nächsten Elements verursacht Die zu überspringende Schleife.
Umschreiben für genaues Entfernen von Elementen
Um dieses Verhalten zu korrigieren, sollten Sie eine Kopie von durchlaufen Entfernen Sie Elemente aus der Liste oder verwenden Sie alternative Methoden, um Elemente zu entfernen. Hier gibt es drei Optionen:
del letters[:]
letters[:] = []
letters = []
Alternativ, wenn Sie bestimmte Elemente basierend auf a entfernen müssen Bedingung können Sie die Liste mithilfe einer Comprehension-Funktion oder der Funktion filter() filtern:
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
Durch Befolgen dieser Richtlinien können Sie eine genaue und effiziente Entfernung von Elementen aus Listen in Python sicherstellen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3