如果列表中的项满足条件,请删除该项和前面的多个项

2024-03-29 12:55:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种方法来删除列表中每个第n个项(我们称之为i),如果i满足某个条件,那么i前面的个项目也可以删除。你知道吗

我一直在研究列表理解和迭代,但对于新手来说,找到解决方案是很棘手的。你知道吗

示例:

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

对于每个第三项,检查i == "wrong": 如果是这样,请删除i前面的两个(2)。你知道吗

效果:序列"I, "am", "wrong"从列表中删除。你知道吗


Tags: 项目方法rightyou示例列表解决方案条件
3条回答
>>> 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变成一个变量

这里有一个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']

以你为例

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]

相关问题 更多 >