关于python:如何在遍历列表时删除元素

How to remove an element when I traverse a list

我在如何在遍历列表时删除元素中阅读了以下内容:在python中遍历列表时删除元素

以此为例:

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

但是如果我想删除元素(如果它是字符串的一部分),我该怎么做呢?例如,如果只输入"een"(只是颜色中"green"字符串元素的一部分),我想过滤"green"?


使用列表理解而不是使用filter()

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

或者,如果您想继续使用filter()

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


列表理解是此循环的较短版本:

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

以下是对应的清单理解:

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

您还可以使用过滤器示例,如下所示:

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

请记住,这不会更改原始的colors列表,它只会返回一个新的列表,其中只包含与您的过滤器匹配的项。您可以删除匹配的项,这些项将修改原始列表,但是您需要从结尾开始,以避免连续匹配出现问题:

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