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:
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)]
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