如果列表中的项目符合条件,则删除项目和多个前面的项目

时间:2016-06-11 18:36:47

标签: python list enumerate

我正在寻找一种方法来删除列表中的每个 第n个 项目(让我们称之为项目i x 如果i符合条件,则列表中i前面的项目数量。

我一直在查看列表推导和迭代,但对于新手来说找到解决方案一直很棘手。

示例:

myList = ["you", "are", "right", "I", "am", "wrong"]

对于每个 3rd 项,请检查i == "wrong"是否: 如果是,请删除i两个 (2)项目前面的 i

效果:从列表中删除序列"I, "am", "wrong"

3 个答案:

答案 0 :(得分:1)

>>> myList = ["you", "are", "right", "I", "am", "wrong"]
>>> for i, l in enumerate(myList):
...   if l == 'wrong':
...     myList = myList[:i-2]
...     break
... 
>>> myList
['you', 'are', 'right']

当然你可以让2变量

答案 1 :(得分:1)

对于你的例子来说,

new_list = [v for i, v in enumerate(myList)
            if myList[3*int(i/3)+2] != 'wrong']

这是有效的,因为您不想复制以'错误'结尾的整个3个项目组。如果您只想删除该组的一部分或不在该组中的某些项目,则会更复杂。例如,如果您想要删除错误的'值和它之前的值,你可以使用

new_list = [v for i, v in enumerate(myList)
            if myList[3*(i/3)+2] != 'wrong' or i % 3 == 0]

答案 2 :(得分:0)

这是一个numpy.delete的解决方案。 Numpy.delete使用索引删除元素。所以你可以找到相应的匹配并删除你想要的前面的匹配。

In [1]: import numpy as np
In [2]: myList = ["you", "are", "right", "I", "am", "wrong"]
In [3]: for i,j in enumerate(myList):
    if j == 'wrong':
        out = np.delete(myList,[i-2,i-1,i]).tolist()
   ....:      
In [4]: out
Out[1]: ['you', 'are', 'right']