Heim  >  Artikel  >  Backend-Entwicklung  >  Warum sollten Sie beim Durchlaufen einer Python-Liste das Entfernen von Elementen vermeiden?

Warum sollten Sie beim Durchlaufen einer Python-Liste das Entfernen von Elementen vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-19 11:16:29573Durchsuche

When Iterating Through a Python List, Why Should You Avoid Removing Items?

Python-Listen: Fallstricke beim Entfernen von Elementen während der Iteration

Das Durchlaufen einer Python-Liste bei gleichzeitigem Entfernen von Elementen kann zu unerwartetem Verhalten führen. Ein bemerkenswertes Beispiel ist das Folgende:

<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
    letters.remove(i)</code>

Rätselhafterweise zeigt der letzte Ausdruck der Briefe, dass nur alle anderen Elemente entfernt wurden.

Grund für die Anomalie

Dieses Verhalten ergibt sich aus der Art und Weise, wie Python während der Iteration mit Änderungen an Iterables umgeht. In der Dokumentation heißt es ausdrücklich, dass das Ändern einer Sequenz, über die iteriert wird, im Allgemeinen unsicher ist, insbesondere für veränderliche Typen wie Listen.

Diese Vorgehensweise kann zu undefiniertem Verhalten und möglichen Änderungen in zukünftigen Python-Builds führen.

Korrekter Ansatz zum Entfernen aller Elemente

Um alle Elemente sicher aus einer Liste zu entfernen, verwenden Sie eine der folgenden Methoden:

  • Entf-Buchstaben[:], um alle zu löschen Elemente und Verweise auf das Listenobjekt.
  • letters[:] = [], um der vorhandenen Variablen eine neue leere Liste zuzuweisen, wobei Verweise auf das ursprüngliche Objekt intakt bleiben.
  • letters = [] um eine neue leere Liste zu erstellen und sie einer neuen Variablen zuzuweisen.

Handhabung der bedingten Elemententfernung

Für die bedingte Entfernung von Elementen erstellen Sie eine Kopie der Liste mithilfe der Slice-Syntax [:] auflisten:

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

Alternativ können Sie die Filterfunktion verwenden, um unerwünschte Elemente auszuschließen:

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

Das obige ist der detaillierte Inhalt vonWarum sollten Sie beim Durchlaufen einer Python-Liste das Entfernen von Elementen vermeiden?. 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