在python中比较和删除列表中的子列表

在python中比较和删除列表中的子列表,python,list,Python,List,我有一个例子 list1=[[2,4],[5,10],[6,7],[8,9],[11,14],[13,16]] 我想根据条件删除完整的子列表。子列表中的第二个元素大于下一个子列表。所以我弹出子列表,直到条件满足 列表的输出应该是 final_list1=[[2,4],[5,10],[11,14],[13,16]] 您可以使用reduce来执行此操作 >>> from functools import reduce >>> reduce(lambda lst

我有一个例子

list1=[[2,4],[5,10],[6,7],[8,9],[11,14],[13,16]]
我想根据条件删除完整的子列表。子列表中的第二个元素大于下一个子列表。所以我弹出子列表,直到条件满足

列表的输出应该是

final_list1=[[2,4],[5,10],[11,14],[13,16]]
您可以使用reduce来执行此操作

>>> from functools import reduce
>>> reduce(lambda lst,e: (lst+[e] if lst[-1][1]<=e[0] or lst[-1][1]<=e[1] else lst), [[list1[0]]] + list1[1:])

[[2, 4], [5, 10], [11, 14], [13, 16]]

应该这样做的代码在哪里?什么不适用于它?这应该非常简单。想一想。@Hozikimaru:你能告诉我逻辑吗。所以我可以写代码。@JN学生号。所以不是个人为你完成作业。你应该阅读关于什么类型的问题实际上应该发布到SO。逻辑:创建一个空列表。遍历列表,添加第一个元素,对于下一个元素,检查其第二个值是否大于新列表中最后一个元素的第二个值,如果是,则添加,否则不添加。直到完成为止。好了,非常感谢。这是一个不适合使用functools.reduce的地方。这是非常低效的,因为您通过在每次迭代中添加来创建一个新列表。@pault我只是选择了reduce,因为列表的大小很小,我想做一行。对于较大的列表,您可以执行类似lst=[list1[0]];=[lst.如果lst[-1][1]中的e,则为列表1[1:]中的e添加lst.appende]