Python 删除列表中两个项目之间(包括两个)的所有项目

Python 删除列表中两个项目之间(包括两个)的所有项目,python,list,function,find,remove,Python,List,Function,Find,Remove,我试图创建一个函数,在列表中找到1和2,并将其截断,包括它之间的所有内容。无论列表中有多少1-2节,它都应该适用 例如: sumOf12([1, 2, 2, 1, 99, 99, 2]) 应具有[2]的输出,因为第一个1-2被切断。 numList[3]和numList[6]也是一对1-2,因此两者之间的所有内容都被切断 如果你能帮助解决这个问题,那就太好了 一种简单而天真的方法: def drop_between(xs, first, last): include = True

我试图创建一个函数,在列表中找到1和2,并将其截断,包括它之间的所有内容。无论列表中有多少1-2节,它都应该适用

例如:

sumOf12([1, 2, 2, 1, 99, 99, 2])
应具有
[2]
的输出,因为第一个1-2被切断。
numList[3]
numList[6]
也是一对1-2,因此两者之间的所有内容都被切断


如果你能帮助解决这个问题,那就太好了

一种简单而天真的方法:

def drop_between(xs, first, last):
    include = True
    for x in xs:
        if include:
            if x == first:
                include = False
            else:
                yield x
        else:
            if x == last:
                include = True



print(list(drop_between([1, 2, 2, 1, 99, 99, 2], 1, 2)))
结果:

[2]
[2]
[2, 1, 99, 99]
与使用
yield
创建生成器(然后使用
list()
在列表中捕获结果)不同,您当然可以创建一个空列表,并在运行时使用
.append()
添加结果

但是,如果遇到
1
2
从未出现,则以
1
开头的所有值仍将被删除-可能这不是您想要的

i、 e:

结果:

[2]
[2]
[2, 1, 99, 99]
一种跟踪跳过项目的解决方案,因此如果未找到
last
标记,它仍然可以生成这些项目:

def drop_between(xs, first, last):
    skipped = []
    for x in xs:
        if not skipped:
            if x == first:
                skipped = [x]
            else:
                yield x
        else:
            skipped.append(x)
            if x == last:
                skipped = []
    if skipped:
        yield from skipped


print(list(drop_between([1, 2, 2, 1, 99, 99], 1, 2)))
结果:

[2]
[2]
[2, 1, 99, 99]

创建空列表或参数“结果” 做一个while循环。可选:在退出条件下,eiter索引为1或2时返回-1(未找到)

输入while循环和搜索索引1。如果未找到,则中止并将列表添加到结果中。如果找到,从索引1开始搜索索引2。同样,如果未找到索引2,则将所有内容添加到结果列表中。 如果两者都找到了,则删除索引1之前的所有内容,并将其添加到结果中。然后删除从索引1到索引2的所有内容。 继续while循环

若附加到结果列表,可能会有不同的选项。如果您只想将这些值彼此相加,可以使用加法。如果您想在检查结果之前,创建一个列表似乎更好

可能您希望得到这样的结果[[2,3,4,1,4],[1],[2,2]]或这样的平面列表[2,3,4,1,4,1,2,2]。两者都是可能的,但这取决于编程语言如何解决这个问题

使用有效的测试数据检查结果。然后,您将看到它是否在每种情况下都有效