我在遍历列表时如何删除元素时读到了这个: Remove elements as you traverse a list in Python
以此为例:
>>> colors=['red', 'green', 'blue', 'purple']
>>> filter(lambda color: color != 'green', colors)
['red', 'blue', 'purple']
但是,如果我想删除元素,如果它是字符串的一部分,我怎么能这样做? 即如果我输入'een'(只是颜色中'绿色'字符串元素的一部分,我想过滤'绿色'?
答案 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)