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"?
使用列表理解而不是使用
1 2 3 | >>> colors = ['red', 'green', 'blue', 'purple'] >>> [color for color in colors if 'een' not in color] ['red', 'blue', 'purple'] |
或者,如果您想继续使用
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'] |
请记住,这不会更改原始的
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) |
。