我正在寻找一种方法,以消除每个第n个元素(我们称之为该项目i )在列表中, 并且X项目的数量直接之前i在列表中,如果i满足的条件。

我一直在研究列表推导和迭代,但是对于新手来说,找到解决方案非常棘手。

例:

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

对于每一个第三个项目,检查i == "wrong" :如果是这样,除去i两个 (2)前面的 i

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

===============>>#1 票数:2 已采纳

>>> 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设为变量

===============>>#2 票数: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]

===============>>#3 票数: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']

  ask by Winterflags translate from so

未解决问题?本站智能推荐: