Entfernen Sie Elemente, während Sie eine Liste in Python

Diese Frage hat hier schon eine Antwort:

  • Entfernen Sie Elemente aus einer Liste, während Sie 18 Antworten beantworten

In Java kann ich mit einem Iterator und dann mit der Methode .remove() des Iterators verwenden, um das letzte vom Iterator zurückgegebene Element 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 das in Python machen? Ich kann die Liste nicht ändern, während ich über sie in einer for-Schleife iteriere, weil es verursacht, dass Sachen übersprungen werden (siehe hier ). Und es scheint kein Äquivalent der Iterator Schnittstelle von Java zu sein.

4 Solutions collect form web for “Entfernen Sie Elemente, während Sie eine Liste in Python”

Iterate über eine Kopie der Liste:

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

Der beste Ansatz in Python ist es, eine neue Liste zu machen, idealerweise in einer listcomp, die es als [:] des alten einstellt, zB:

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

NICHT colors = wie manche Antworten vorschlagen können – das nur den Namen wiedergibt und irgendwann einige Hinweise auf den alten "Körper" baumelt; colors[:] = ist viel besser auf allen zählungen ;-).

Sie könnten Filterfunktion verwenden:

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

Oder das kannst du auch so machen

 >>> colors = ['red', 'green', 'blue', 'purple'] >>> if colors.__contains__('green'): ... colors.remove('green') 
Python ist die beste Programmiersprache der Welt.