Frage

    

Diese Frage bereits eine Antwort hier:

         

In Java Ich kann ein unter Verwendung Iterator tun und dann die Verwendung von .remove() :> Methode des Iterators das letzte Element des Iterators, wie diese wieder zu entfernen

import java.util.*;

public class ConcurrentMod {
    public static void main(String[] args) {
        List<String> colors = new ArrayList<String>(Arrays.asList("red", "green", "blue", "purple"));
        for (Iterator<String> it = colors.iterator(); it.hasNext(); ) {
            String color = it.next();
            System.out.println(color);
            if (color.equals("green"))
                it.remove();
        }
        System.out.println("At the end, colors = " + colors);
    }
}

/* Outputs:
red
green
blue
purple
At the end, colors = [red, blue, purple]
*/

Wie würde ich dies in Python tun? Ich kann nicht die Liste ändern, während ich Iterierte über sie in einer for-Schleife, weil sie Sachen verursacht (siehe hier ). Und es scheint nicht ein Äquivalent der Iterator Schnittstelle von Java zu sein.

War es hilfreich?

Lösung

Iterate über ein Kopieren der Liste:

for c in colors[:]:
    if c == 'green':
        colors.remove(c)

Andere Tipps

Best Ansatz in Python ist eine neue Liste zu machen, idealerweise in einem listcomp, es als [:] der alten Einstellung, z.

colors[:] = [c for c in colors if c != 'green']

NICHT colors = wie einige Antworten könnte darauf hindeuten, - dass nur der Name erneut bindet und schließlich einige Verweise auf den alten „Körper“ verlassen baumeln; colors[:] = ist viel besser in jeder Hinsicht; -).

Sie können Filterfunktion verwenden:

>>> colors=['red', 'green', 'blue', 'purple']
>>> filter(lambda color: color != 'green', colors)
['red', 'blue', 'purple']
>>>

oder Sie können wie diese

auch tun
>>> colors = ['red', 'green', 'blue', 'purple']
>>> if colors.__contains__('green'):
...     colors.remove('green')
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top