Python - 如何从列表中删除精确值的项目,以及列表中的下两个项目?

时间:2017-02-27 16:36:39

标签: python list list-comprehension

我有一个清单:

list = [1, 2, 'unwanted', 3, 'green', 'tomato', 'unwanted', 'random', 45]

我尝试删除所有'unwanted'项,以及接下来的两项,无论它们是哪一项。最简单的方法是什么?如果可能的话,我希望通过列表理解来做到这一点。

2 个答案:

答案 0 :(得分:4)

您可以通过检查当前位置或列表中的前面项目中是否有'unwanted'来执行此操作:

>>> lst = [1, 2, 'unwanted', 3, 'green', 'tomato', 'unwanted', 'random', 45]
>>> [item for idx, item in enumerate(lst) if 'unwanted' not in lst[max(0, idx-2): idx+1]]
[1, 2, 'tomato']

使用与内置函数同名的变量通常是个坏主意,所以我在这里将其重命名为lst

答案 1 :(得分:0)

你可以这样做:

[element for ndx, element in enumerate(list) if (list[ndx] != 'unwanted') & (list[ndx-1] != 'unwanted') & (list[ndx-2] != 'unwanted')]