2010-08-05 116 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'] 

仍想知道是否有任何方式使用中長x時設置迭代回一組雖然。

+0

Dupe-ish:http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python – bhangm 2010-08-05 15:43:22

+0

請接受幫助您解決問題的答案,而不是添加「解決」的標題。點擊答案旁邊的綠色複選標記以接受答案。 (如果沒有答案幫助你,那麼請添加你自己的答案,解釋你是如何解決問題的。)謝謝,歡迎來到Stack Overflow。 – 2010-08-05 15:48:10

回答

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」作爲[** MattH答案**](https://stackoverflow.com/a/3416473/5951529),而不是「如果不是」「2」'。謝謝。 – 2018-01-01 08:47:11

+1

@СашаЧерных,謝謝,我已經編輯了答案 – loevborg 2018-03-01 19:46:55

0

您可能遇到的問題是,您正在嘗試修改序列l,同時您在循環中對其進行循環。

相關問題