如何遍历列表时删除元素

时间:2013-08-04 06:14:06

标签: python

我在遍历列表时如何删除元素时读到了这个: Remove elements as you traverse a list in Python

以此为例:

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

但是,如果我想删除元素,如果它是字符串的一部分,我怎么能这样做? 即如果我输入'een'(只是颜色中'绿色'字符串元素的一部分,我想过滤'绿色'?

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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)