В современных браузерах вы можете использовать структуру данных Map
вместо объекта.
Объект Map может выполнять итерацию своих элементов в порядке ввода ...
Лучше всего, чтобы продолжить конструктивно - создайте новый список предметов, которые вы хотите, вместо того, чтобы удалять те, которые у вас нет. Например:
L[:] = [el for el in L if el != 3]
понимание списка создает желаемый список и назначение в «список всего списка», L[:]
, убедитесь, что вы не просто переименовываете имя, но полностью заменяете contents , поэтому эффекты одинаково равны «удалениям», которые вы хотели выполнить. Это также очень быстро.
Если вы абсолютно, любой ценой, должны делать удаления вместо этого, может работать тонкий подход:
>>> ndel = 0
>>> for i, el in enumerate(list(L)):
... if el==3:
... del L[i-ndel]
... ndel += 1
нигде элегантный, чистый, простой или хорошо исполняемый, как подход listcomp, но он выполняет свою работу (хотя его правильность на первый взгляд не очевидна, и на самом деле я ошибался перед редактированием!). «любой ценой» применим здесь: -).
Зацикливание по индексам вместо элементов - это другой нижний, но работоспособный подход для случая «должен делать делеции», но помните об обратном индексы в этом случае ...:
for i in reversed(range(len(L))):
if L[i] == 3: del L[i]
действительно, это был основной случай использования для reversed
назад, когда мы обсуждали вопрос о том, добавить ли это встроенный reversed(range(...
не является тривиальным для получения без reversed
, и иногда полезно использовать цикл в списке в обратном порядке. Альтернатива
for i in range(len(L) - 1, -1, -1):
действительно легко ошибиться; -).
Тем не менее, список, который я рекомендовал в начале этого ответа, выглядит лучше и лучше, когда рассматриваются альтернативы, не так ли? -).
2
и часто пропускают элемент в L, когда он делает такие удаления. Какой кошмар отлаживать ...! -)
– Alex Martelli
14 March 2010 в 16:44
reversed(enumerate(...
не работает -enumerate
является итерируемой, но не последовательностью,reversed
нуждается в последовательности в качестве аргумента). – Alex Martelli 14 March 2010 в 16:58