Python 删除列表中两个项目之间(包括两个)的所有项目
我试图创建一个函数,在列表中找到1和2,并将其截断,包括它之间的所有内容。无论列表中有多少1-2节,它都应该适用 例如: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
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]。两者都是可能的,但这取决于编程语言如何解决这个问题 使用有效的测试数据检查结果。然后,您将看到它是否在每种情况下都有效