Beste Methode zum Ändern einer Liste beim Durchlaufen [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Wie entferne ich Elemente aus einer Liste, während ich iteriere? 23 Antworten

Ich habe mehrere Instanzen in einem Python-Skript (v2.6), in denen ich eine Liste direkt ändern muss. Ich muss Werte aus der Liste als Reaktion auf interaktive Eingaben des Benutzers entfernen und möchte die sauberste Methode dafür kennen. Derzeit habe ich die sehr schmutzigen Lösungen, a) Elemente in der Liste, die ich entfernen möchte, auf Falsch zu setzen und sie mit einem Filter oder Listenverständnis zu entfernen, oder b) eine völlig neue Liste zu generieren, während ich die Schleife durchlaufe, was unnötig erscheint Hinzufügen von Variablen zum Namespace und Belegen des Speichers.

Ein Beispiel für dieses Problem ist wie folgt:

<code>for i, folder in enumerate(to_run_folders):
    if get_size(folder) < byte_threshold:
        ans = raw_input(('The folder {0}/ is less than {1}MB.' + \
                    ' Would you like to exclude it from' + \
                    ' compression? ').format(folder, megabyte_threshold))
        if 'y' in ans.strip().lower():
            to_run_folders.pop(i)
</code>

Ich möchte mir jeden Ordner in der Liste ansehen. Wenn der aktuelle Ordner eine bestimmte Größe unterschreitet, möchte ich den Benutzer fragen, ob er ihn ausschließen möchte. Wenn dies der Fall ist, öffnen Sie den Ordner aus der Liste.

Das Problem bei dieser Routine besteht darin, dass beim Durchlaufen der Liste ein unerwartetes Verhalten und eine vorzeitige Beendigung auftreten. Wenn ich eine Kopie durchschneide, zieht pop nicht den richtigen Wert, da die Indizes verschoben werden und das Problem sich verschmilzt, wenn mehr Elemente auftauchen. Ich brauche eine solche dynamische Listenanpassung auch in anderen Bereichen meines Skripts. Gibt es eine saubere Methode für diese Art von Funktionalität?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage