2015-12-18 91 views
0

我試圖通過刪除符合條件的列表中的那些元素來進行簡單列表篩選。循環遍歷列表並刪除符合某些條件的列表 - Python

>>> a = ["a" , "e" , "i" , "o" , "u"] 
>>> for elem in a: 
...  a.remove(elem) 

在這種情況下,我不過濾,我試圖刪除所有元素。但是,如果我print a這是我所看到的:

>>> print a 
["e" , "o"] 

它不可能通過這種方式消除陣列中的所有元素。 Python刪除元素,重新分配索引,然後增加它。所以,Python在每次迭代中跳過一個元素。如果它不適用於最簡單的情況,我怎樣才能正確實現列表過濾?

>>> numbers = [100 , 102 , 103 , 105 , 107, 108, 110, 120] 
>>> for elem in numbers: 
...  if elem % 2 == 0: 
...   numbers.remove(elem) 
... 
>>> numbers 
[102, 103, 105, 107, 110] 

在這種情況下,更自然的(在我看來)執行列表過濾不工作...你如何控制這種操作的?

謝謝!

+2

對於爲何移除元素形成當前正在遍歷序列的例證是壞看到我的答案[這裏](http://stackoverflow.com/a/31704332/1318181) – IanAuld

回答

-4

只需使用內置功能filter()

>>> filter(lambda x: x % 2, numbers) 
[103, 105, 107] 
+6

'filter'在Python 3中返回一個生成器對象,而在Python 2中,這仍然會創建*新的*列表而不修改原始列表。另外,你的答案缺乏信息,主要是一個非常不鼓勵的鏈接回答。根據你的聲望來判斷,你應該知道更好。 – poke

+0

@poke:Python 3比Python 2更少使用,所以如果少數用戶需要將結果包裝在額外的list()調用中,我並不介意太多。至於鏈接,它確實需要我多花一分鐘來添加完整的示例。 –