. Лучшим подходом для такого примера будет понимание списка
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)