[英]If item in list meets condition, remove item and multiple preceding items
我正在寻找一种方法,以消除每个第n个元素(我们称之为该项目i
)在列表中, 并且还X项目的数量直接之前i
在列表中,如果i
满足的条件。
我一直在研究列表推导和迭代,但是对于新手来说,找到解决方案非常棘手。
例:
myList = ["you", "are", "right", "I", "am", "wrong"]
对于每一个第三个项目,检查i == "wrong"
:如果是这样,除去i
和两个 (2)项前面的 i
。
效果:从列表中删除序列"I, "am", "wrong"
。
>>> 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设为变量
例如,
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]
这里是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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.