Skip to main content
 首页 » 编程设计

Python按第一个元素的最大值排序,然后是第二个元素的最小值

2025年05月04日16落叶

我在用 Python 做一个几何项目时遇到了一个有趣的问题。假设我有一个像这样的笛卡尔坐标列表:

[[1, 0], [3, 0], [2, 1], [3.5, 2], [4, 3], [6, 1], [6.5, 0], [ 10, 2], [10, 5], [9, 3.5], [7, 3], [9, 7], [7, 8], [5, 7], [4, 5], [2, 8], [1, 7], [0, 5], [1, 3], [0, 2]]

如果存在两个具有相同 y 值的坐标,则通过降 y 值然后增加 x 值来排序此列表的最佳方法是什么?输出应该是:

[[2, 8], [7, 8], [1, 7], [5, 7], [9, 7], [0, 5], [4, 5], [ 10, 5], [9, 3.5], [1, 3], [4, 3], [7, 3], [0, 2], [3.5, 2], [10, 2], [2, 1], [6, 1], [1, 0], [3, 0], [6.5, 0]]

请您参考如下方法:

您可以为 list.sort 提供一个键函数以确定列表中的每个项目应映射到什么值以进行排序。在您的情况下,您可以使用负 Y 坐标和 X 坐标的元组来获得所需的结果:

>>> coordinates = [[1, 0], [3, 0], [2, 1], [3.5, 2], [4, 3], [6, 1], [6.5, 0], [10, 2], [10, 5], [9, 3.5], [7, 3], [9, 7], [7, 8], [5, 7], [4, 5], [2, 8], [1, 7], [0, 5], [1, 3], [0, 2]] 
>>> coordinates.sort(key=lambda x: (-x[1], x[0])) 
>>> coordinates 
[[2, 8], [7, 8], [1, 7], [5, 7], [9, 7], [0, 5], [4, 5], [10, 5], [9, 3.5], [1, 3], [4, 3], [7, 3], [0, 2], [3.5, 2], [10, 2], [2, 1], [6, 1], [1, 0], [3, 0], [6.5, 0]]