Python:使用 lambda 键混淆进行排序

标签 python list sorting lambda

.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]) 时,我得到了错误的答案

enter image description here

当我使用第二种方法 (key=lambda x: (x[0], -x[1])) 时,解决方案被接受。

enter image description here

我的最终代码如下所示:

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]]

虽然右端的顺序似乎有点不同。

最佳答案

lst.sort(key=lambda x: x[0]) 中,您将按每个子列表中的第一个元素对列表进行排序,而忽略其余元素。

lst.sort(key=lambda x: (x[0], -x[1])) 中,您按第一个元素对列表进行排序,如果有两个元素具有相同值的排序将由第二个元素完成。

在第二个sort()中,-x[1]表示与第二个元素中的值相反,所以[1, 4] 小于 [1, 2],而在第一个排序中顺序保持不变,因为只考虑第一个值。

关于Python:使用 lambda 键混淆进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68554829/

相关文章:

python - matplotlib 运行但不生成图形

python - 是否在未完成初始化的对象上调用了 del?

python - 在 Python 中将列表分成一对

Python:如何在引用所有创建的项目的类中实现静态列表以及删除项目的简单方法?

python - 将 3 堆数字从左到右逐行排序

java - Java 中打开文件的数量是否有实际限制?

python - pandas 系列中重复的 NaN 集合

python - 如何更好地使用 Polars 中的 apply?

c# - 无法将 List<List<int>> 转换为返回类型 IList<IList<int>>

java - 有没有办法向 Eclipse 的 "Sort all members"添加排除项?