2010-08-05 3 views
17

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

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

еще хотел бы знать, есть ли способ установить итерации назад один набор при использовании для й в л хоть.

+0

Dupe-ish: http: //stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python – bhangm

+0

Примите ответ, который помог вам решить вашу проблему вместо добавления «Разрешено» к названию. Нажмите зеленую галочку рядом с ответом, чтобы принять ее. (Если ни один из ответов не помог вам, пожалуйста, добавьте ответ самостоятельно, объяснив, как вы решили проблему.) Спасибо, и добро пожаловать в Stack Overflow. –

ответ

35

постижения: Список

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

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

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

могут сделать эту работу.

+1

Не совместим для стиля flake8. Я получаю сообщение об ошибке: 'SashaListComprehension.py:70:45: Тест E713 для членства должен быть« не в ». Для flake8 нам нужно «if» 2 «not» как [** Матт. Ответ **] (https://stackoverflow.com/a/3416473/5951529), а не 'if not" 2 "'. Благодарю. –

+1

@ СашаЧерных, спасибо, я отредактировал ответ – loevborg

0

Проблема, которую вы могли бы решить, заключается в том, что вы пытаетесь изменить последовательность в то же время, что и в ней, для цикла t.

Смежные вопросы