Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

En Java que pueda hacer mediante el uso de un Iterator y luego usando el .remove() método de la iterador para eliminar el último elemento devuelto por el iterador, como este:

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]
*/

¿Cómo voy a hacer esto en Python? No puedo modificar la lista, mientras que iterar sobre ella en un bucle, ya que causa la materia a ser omitidos (ver aquí ). Y no parece ser un equivalente de la interfaz Iterator de Java.

¿Fue útil?

Solución

iterar sobre una Copiar de la lista:

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

Otros consejos

El mejor enfoque en Python es hacer una nueva lista, idealmente en una listcomp, configurándolo como el [:] de la antigua, por ejemplo:.

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

NO colors = como algunas respuestas pueden sugerir - que sólo vuelve a vincular el nombre y eventualmente dejará algunas referencias a la vieja colgando "cuerpo"; colors[:] = es mucho mejor en todos los aspectos; -).

Se puede utilizar la función de filtro:

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

o también se puede hacer como esto

>>> colors = ['red', 'green', 'blue', 'purple']
>>> if colors.__contains__('green'):
...     colors.remove('green')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top