Удалите элементы при перемещении списка в Python

В Java я могу сделать с помощью Iterator а затем использовать метод .remove() итератора для удаления последнего элемента, возвращаемого итератором, например:

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

Как мне это сделать в Python? Я не могу изменить список, пока я перебираю его в цикле for, потому что он заставляет вещи пропускаться (см. Здесь ). И, похоже, не существует эквивалента интерфейса Iterator Java.

  • Python: реализация среза в __getitem__
  • Как выполнить интроспекцию объекта в Python 2.x?
  • Цитирование по методам объекта Python / IronPython
  • Python - класс __hash__ и установить
  • Все ли больше, чем Нет?
  • Оператор умножения, применяемый к списку (структуре данных)
  • Получить класс, который определил метод
  • Какова связь между моделью данных Python и встроенными функциями?
  • 4 Solutions collect form web for “Удалите элементы при перемещении списка в Python”

    Итерируйте над копией списка:

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

    Лучший подход в Python состоит в том, чтобы создать новый список, в идеале в listcomp, установив его как [:] старого, например:

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

    NOT colors = как могут дать некоторые ответы – это только повторное копирование имени и, в конце концов, оставит некоторые ссылки на старое «тело», свисающее; colors[:] = МНОГО лучше по всем подсчетам ;-).

    Вы можете использовать функцию фильтра:

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

    или вы также можете сделать это

     >>> colors = ['red', 'green', 'blue', 'purple'] >>> if colors.__contains__('green'): ... colors.remove('green') 
    Python - лучший язык программирования в мире.