【发布时间】:2021-10-03 20:47:16
【问题描述】:
.sort(key=lambda x: x[0]) 和 .sort(key=lambda x: (x[0], -x[1])) 有什么区别。我以为他们都会对列表进行排序。
我尝试了一个例子:
lst = [[2,1], [0,4], [6,7], [3, 5]]
lst.sort(key=lambda x: x[0])
print(last)
>>> [[0, 4], [2, 1], [3, 5], [6, 7]]
lst = [[2,1], [0,4], [6,7], [3, 5]]
lst.sort(key=lambda x: (x[0], -x[1]))
print(last)
>>> [[0, 4], [2, 1], [3, 5], [6, 7]]
在这种情况下,它们的工作原理是相同的。
然而,在这个LeetCode problem 中,当我使用第一种方法 (key=lambda x: x[0]) 时,我得到了错误的答案
当我使用第二种方法 (key=lambda x: (x[0], -x[1])) 时,该解决方案被接受。
我的最终代码如下所示:
class Solution:
def removeCoveredIntervals(self, intervals: List[List[int]]) -> int:
# intervals.sort(key=lambda x: x[0])
intervals.sort(key=lambda x: (x[0], -x[1]))
last = -1
removed = 0
for i in intervals:
if i[1] <= last:
removed += 1
else:
last = i[1]
return len(intervals) - removed
另外,我想问题出在以相同左端开头的间隔(如错误答案中)。当我单独尝试那个测试用例时,我得到了这个:
lst = [[1,2], [1,4], [3,4]]
lst.sort(key=lambda x: x[0])
print(last)
>>> [[1, 2], [1, 4], [3, 4]]
lst = [[1,2], [1,4], [3,4]]
lst.sort(key=lambda x: (x[0], -x[1]))
print(last)
>>> [[1, 4], [1, 2], [3, 4]]
不过,右端的顺序似乎有点不同。
【问题讨论】:
-
我认为它首先寻找子列表的第一个元素,然后是
-子列表的第二个元素。然后就是按照那个排序了
标签: python list sorting lambda