我正在寻找一种方法来删除列表中的每个 第n个 项目(让我们称之为项目i
)和 x 如果i
符合条件,则列表中i
前面的项目数量。
我一直在查看列表推导和迭代,但对于新手来说找到解决方案一直很棘手。
示例:
myList = ["you", "are", "right", "I", "am", "wrong"]
对于每个 3rd 项,请检查i == "wrong"
是否:
如果是,请删除i
和两个 (2)项目前面的 i
。
效果:从列表中删除序列"I, "am", "wrong"
。
答案 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']