2017-10-13 88 views
0

我想使用forloop刪除某些符合條件的元素。奇怪的問題,該元素不會從列表中刪除

name_list = ["Win-0.3.4-x86_64", "CentOS7.1"] 

for name in name_list: 
    if "snapshot" not in name: 
     name_list.remove(name) 

print name_list # there print ['CentOS7.1'] 

但最後,它並沒有刪除所有滿足條件的元素。

+0

因爲,你修改了列表,所以尺寸縮小。不要這樣做。 –

+0

如果您正在修改正在迭代的內容,則正常的迭代將不正確。 –

+0

從您正在迭代的列表中刪除項目就像鋸掉您正在坐的樹枝。如果你在錯誤的一面看到壞事發生。 ;)如果你反向遍歷它,你可以安全地從列表中移除項目,但是通常只是簡單地迭代並建立一個新列表。 –

回答

0

你不能在列表中修改列表的元素,迭代將不會正常執行。

您可以將列表複製到新列表,然後重新放入新列表並刪除原始列表。

您嘗試使用波紋管代碼:

import copy 

name_list = ["Win-0.3.4-x86_64", "CentOS7.1"] 

name_list_cp = copy.copy(name_list) 

for name in name_list_cp: 
    if "snapshot" not in name: 
     name_list.remove(name) 


print name_list 

最後,將打印一個空列表[]