wie man den Iterator einer Schleife in Python innerhalb der Schleife richtig ändert

8

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.

    
tst 17.12.2011, 11:58
quelle

4 Antworten

9

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%     
jsbueno 17.12.2011, 12:00
quelle
8

Es ist besser, Dinge, die bereits verfügbar sind, nicht neu zu erfinden. Verwenden Sie in diesen Fällen Funktionen und Lambda. Es ist pythischer und sieht sauberer aus.

%Vor%

Alternativ können Sie das Listenverständnis verwenden

%Vor%     
Abhijit 17.12.2011 12:04
quelle
3

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%     
Charles Haynes 05.08.2013 01:04
quelle
1

Wenn Sie mit dem Erstellen einer Kopie der Liste einverstanden sind, können Sie das tun ( Listenverständnis ):

%Vor%     
gecco 17.12.2011 12:04
quelle

Tags und Links