. Лучшим подходом для такого примера будет понимание списка
somelist = [tup for tup in somelist if determine(tup)]
. В тех случаях, когда вы делаете что-то более сложное, чем вызов функции determine
Я предпочитаю создавать новый список и просто добавлять к нему, когда я иду. Например
newlist = []
for tup in somelist:
# lots of code here, possibly setting things up for calling determine
if determine(tup):
newlist.append(tup)
somelist = newlist
Копирование списка с помощью remove
может сделать ваш код немного чище, как описано в одном из ответов ниже. Вы должны определенно не делать этого для чрезвычайно больших списков, поскольку это включает в себя первое копирование всего списка, а также выполнение операции O(n)
remove
для каждого удаляемого элемента, что делает этот алгоритм O(n^2)
.
for tup in somelist[:]:
# lots of code here, possibly setting things up for calling determine
if determine(tup):
newlist.append(tup)
Это не похоже на ошибку. Вы запускаете приложение в отладчике или аналогичном инструменте разработки, который, как представляется, должен приостанавливать вашу программу в указанном месте либо точкой останова, либо правилом, например «остановить при создании экземпляра».
Вы должны проверить вашей среды. Запуск с простой пусковой установкой java
не вызывает такой ошибки.
Вы используете Eclipse, правильно?
У вас нет ошибки, просто точка останова метода . Проверьте левую полосу рядом с кодом. Там будет синий круг, с галочкой и стрелой.
У вас есть несколько вариантов: