„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 18.11.2024
Durchsuche:114

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:

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
    letters.remove(i)

Rätselhafterweise zeigt der endgültige Ausdruck der Buchstaben, 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.

Richtiger Ansatz zum Entfernen aller Elemente

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

  • del Buchstaben[:] um alle Elemente und Verweise auf das Listenobjekt zu löschen.
  • 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 zuzuweisen Variable.

Behandlung der bedingten Elemententfernung

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

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

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

commands = [cmd for cmd in commands if not is_malicious(cmd)]
Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729301595 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

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