Wie iteriere und entferne ich Elemente sicher aus einer Python-Liste?

Susan Sarandon
Freigeben: 2024-10-19 11:52:29
Original
583 Leute haben es durchsucht

How to Safely Iterate and Remove Items from a Python List?

Verstehen der Gefahr, Elemente aus einer Liste während der Iteration zu entfernen

Bei dem Versuch, alle Elemente aus einer Liste zu entfernen, während darüber iteriert wird, Benutzer können auf unerwartetes Verhalten stoßen. Sehen wir uns einen Codeausschnitt an, der dieses Problem veranschaulicht:

<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>
Nach dem Login kopieren

Rätselhafterweise lautet die Ausgabe dieses Codes ['b', 'd', 'f', 'h', 'j', 'l ']. Anstatt alle Elemente zu entfernen, scheint es jedes andere Element entfernt zu haben.

Die Grundursache

Pythons Listenverständnis verhält sich in solchen Fällen anders. In der Dokumentation wird klargestellt: „Es ist nicht sicher, die Sequenz zu ändern, über die in der Schleife iteriert wird.“ Durch das Entfernen eines Elements aus der Liste während der Iteration wird der Index des nächsten Elements falsch. Folglich überspringt die Schleife ein Element, was zum beobachteten Muster führt.

Sichere Alternativen

Um alle Elemente sicher aus einer Liste zu entfernen, gibt es mehrere Optionen:

  1. Mit del: Dieser Ansatz entfernt alle Elemente und hinterlässt eine leere Liste:

    <code class="python">del letters[:]</code>
    Nach dem Login kopieren
  2. Mit Buchstaben [:] = []: Dadurch wird eine neue leere Liste erstellt und die alte verworfen:

    <code class="python">letters[:] = []</code>
    Nach dem Login kopieren
  3. Eine neue Liste zuweisen: Dadurch wird erstellt ein separates Objekt:

    <code class="python">letters = []</code>
    Nach dem Login kopieren
  4. Filtern der Liste: Beim selektiven Entfernen von Elementen wird empfohlen, über eine Kopie der Liste zu iterieren:

    <code class="python">commands = ["ls", "cd", "rm -rf /"]
    for cmd in commands[:]:
     if "rm " in cmd:
         commands.remove(cmd)</code>
    Nach dem Login kopieren

Alternativ kann die Liste prägnanter gefiltert werden:

<code class="python">commands = [cmd for cmd in commands if not is_malicious(cmd)]</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie iteriere und entferne ich Elemente sicher aus einer Python-Liste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!