2013-08-04 53 views
2

我如何刪除元素看這是我穿過的列表如何刪除一個元素: Remove elements as you traverse a list in Python當我遍歷列表

使用此作爲一個例子:

>>> colors=['red', 'green', 'blue', 'purple'] 
>>> filter(lambda color: color != 'green', colors) 
['red', 'blue', 'purple'] 

但我怎麼能如果我想刪除元素,如果它是字符串的一部分呢? 即我希望篩選的「綠色」,如果我輸入只是「EEN」(只是「綠色」字符串元素的顏色部分

回答

3

列表解析是這個循環的一個較短的版本:

new_list = [] 
for i in colors: 
    if 'een' not in i: 
     new_list.append(i) 

下面的列表理解相當於:

new_list = [i for i in colors if 'een' not in i] 

您還可以使用過濾器例子,像這樣:

>>> filter(lambda x: 'een' not in x, colors) 
['red', 'blue', 'purple'] 

請記住,這不會改變原來的colors列表,它只會返回一個新的列表,只有與您的過濾器匹配的項目。您可以刪除匹配,這將修改原始列表中的項目,但你需要從月底開始,以避免連續兩場比賽的問題:

for i in colors[::-1]: # Traverse the list backward to avoid skipping the next entry. 
    if 'een' in i: 
     colors.remove(i) 
5

使用list comprehension而不是使用filter()

>>> colors = ['red', 'green', 'blue', 'purple'] 
>>> [color for color in colors if 'een' not in color] 
['red', 'blue', 'purple'] 

或者,如果您希望繼續使用filter()

>>> filter(lambda color: 'een' not in color, colors) 
['red', 'blue', 'purple'] 
+0

無需在交互式提示打印。 –

+1

@BurhanKhalid Nah,但我喜歡加入:)。呃,我不妨把它刪除掉 – TerryA

+0

不打印,'repr(x)'會在交互提示符下打印出來。打印時,打印「str(x)」。所以這取決於你想看到的。 (雖然對於字符串列表無關緊要) –