Подтвердить что ты не робот

Удаление элементов из списка, содержащего определенные символы

Я хочу удалить все элементы в списке, который содержит (или не содержит) набор конкретных символов, однако я бегу к проблемам, итерации по списку и удалению элементов по мере продвижения. Ниже приведены два довольно равных примера этого. Как вы можете видеть, если два элемента, которые должны быть удалены, непосредственно следуют друг за другом, второй не удаляется.

Я уверен, что в 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.

4b9b3361

Ответ 1

Сопоставление списков:

>>> 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']

Ответ 2

Если вы правильно поняли,

[x for x in l if not "2" in x]

может выполнить эту работу.

Ответ 3

У вас может возникнуть проблема, заключающаяся в том, что вы пытаетесь изменить последовательность l в то же время, что и цикл для нее в цикле t.