Eine Minuten bitte, Ich hap eine
Kleine Problemo avec diese Религия.
- Эдди Иззард (делает свое впечатление
Мартина Лютера)
Удаление с помощью обратной итерации по списку для сохранения итератора является распространенным решением этой проблемы. Но другое решение состоит в том, чтобы изменить это в другую проблему. Вместо удаления элементов из списка с использованием некоторых критериев (в вашем случае индекс существует в списке индексов, которые нужно удалить), создайте новый список, в котором исключены нарушающие элементы.
L[:] = [ item for i,item in enumerate(L) if i not in I ]
Кстати, откуда вы взялись за индексы в I
? Вы можете объединить логику получения индексов для удаления и построения нового списка. Предполагая, что это список объектов, и вы хотите сохранить только те, которые проходят тест isValid
:
L[:] = [ item for item in L if item.isValid() ]
Это гораздо проще, чем:
I = set()
for i in range(len(L)):
if not L[i].isValid():
I.add(i)
for i in sorted(I, reverse=True):
del L[i]
По большей части я превращаю любой вопрос о том, «как удалить из списка ненужные элементы», в «как создать новый список, содержащий только те элементы, которые я хочу».
РЕДАКТИРОВАНИЕ: изменено «L = ...» на «L [:] = ...» согласно ответу Алекса Мартелли на на этот вопрос .