Я хочу удалить все элементы в списке, который содержит (или не содержит), ряд определенных символов, однако я работаю в к итерации задач по списку и удалению элементов, поскольку я продвигаюсь. Два в значительной степени равных примера этого даны ниже. Как Вы видите, если два элемента, которые должны быть удалены, непосредственно следуют друг за другом, второй не становится удаленным.
Я уверен, что существует очень простой способ сделать это в Python, поэтому если кто-либо знает это, выручите меня - я в настоящее время делаю копию всего списка и выполняю итерации по одному и удаляю элементы в другом... Не хорошее решение я принимаю
>>> l
['1', '32', '523', '336']
>>> for t in l:
... for c in t:
... if c == '2':
... l.remove(t)
... break
...
>>> l
['1', '523', '336']
>>> l = ['1','32','523','336','13525']
>>> for w in l:
... if '2' in w: l.remove(w)
...
>>> l
['1', '523', '336']
Понятый это:
>>> l = ['1','32','523','336','13525']
>>> [x for x in l if not '2' in x]
['1', '336']
Все еще хотел бы знать, существует ли какой-либо способ установить повторение, поддерживают набор того при использовании для x в l все же.
Список представлений:
>>> l = ['1', '32', '523', '336']
>>> [ x for x in l if "2" not in x ]
['1', '336']
>>> [ x for x in l if "2" in x ]
['32', '523']
Если я вас правильно понимаю,
[x for x in l if "2" not in x]
может сработать.
Проблема, которая может возникнуть у вас, заключается в том, что вы пытаетесь изменить последовательность l в тот же момент, когда вы перебираете ее в цикле for t.