如果列表中的项目满足条件,删除项目和多个前面的项目
If item in list meets condition, remove item and multiple preceding items
我正在寻找一种方法来删除列表中的每个 nth 项(我们称该项为 i
) , and 也 x 列表中直接在 i
之前的项目数,如果 i
满足条件
我一直在四处查看列表推导和迭代,但新手很难找到解决方案。
示例:
myList = ["you", "are", "right", "I", "am", "wrong"]
对于每个 第 3 项,检查是否 i == "wrong"
:
如果是这样,删除 i
和 two (2) 项目 preceding 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']
这是可行的,因为您不想复制以 'wrong' 结尾的整组 3 项。如果您只想删除该组的一部分或不在该组中的某些项目,则会更加复杂。例如,如果您想删除 'wrong' 值和它之前的值,您可以使用
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']
我正在寻找一种方法来删除列表中的每个 nth 项(我们称该项为 i
) , and 也 x 列表中直接在 i
之前的项目数,如果 i
满足条件
我一直在四处查看列表推导和迭代,但新手很难找到解决方案。
示例:
myList = ["you", "are", "right", "I", "am", "wrong"]
对于每个 第 3 项,检查是否 i == "wrong"
:
如果是这样,删除 i
和 two (2) 项目 preceding 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']
这是可行的,因为您不想复制以 'wrong' 结尾的整组 3 项。如果您只想删除该组的一部分或不在该组中的某些项目,则会更加复杂。例如,如果您想删除 'wrong' 值和它之前的值,您可以使用
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']