Was ich im Grunde brauche ist, jedes Element einer Liste zu überprüfen und wenn einige Kriterien passen, möchte ich es aus der Liste entfernen.
Sagen wir zum Beispiel
list = ['a', 'b', 'c', 'd', 'e']
Ich möchte grundsätzlich schreiben (im Prinzip und nicht den eigentlichen Code, den ich zu implementieren versuche)
Wenn ein Element der Liste "b" oder "c" ist, entfernen Sie es aus der Liste und nehmen Sie das nächste.
Aber
%Vor%schlägt fehl, weil, wenn 'b' entfernt wird, die Schleife 'd' und nicht 'c' als nächstes Element annimmt. Gibt es eine Möglichkeit, dies schneller zu tun, als die Elemente in einer separaten Liste zu speichern und sie anschließend zu entfernen?
Danke.
Der einfachste Weg besteht darin, eine Kopie der Liste zu verwenden - es kann mit einem Slice gemacht werden, der sich von "Anfang" bis zum "Ende" der Liste erstreckt, wie folgt:
%Vor%Sie haben dies berücksichtigt, und das ist einfach genug, um in Ihrem Code zu sein, es sei denn, diese Liste ist wirklich groß und in einem kritischen Teil des Codes (wie in der Hauptschleife eines Action-Spiels). In diesem Fall verwende ich manchmal das folgende Idiom:
%Vor%Natürlich können Sie stattdessen auf eine while-Schleife zurückgreifen:
%Vor%Genau dafür ist itertools.ifilter vorgesehen.
%Vor%gibt Ihnen einen Generator für Ihre Liste zurück. Wenn Sie tatsächlich eine Liste benötigen, können Sie sie mit einer der Standardtechniken zum Konvertieren eines Generators in eine Liste erstellen:
%Vor%oder
%Vor%Wenn Sie mit dem Erstellen einer Kopie der Liste einverstanden sind, können Sie das tun ( Listenverständnis ):
%Vor%