如何实现按Y降序、X升序排序坐标对列表?
问题描述
需要对一组坐标对列表排序,规则为:以Y值降序为首要条件,X值升序为平局决胜条件。
输入列表:
[['0', '0'], ['0', '1'], ['1','1'], ['2','1'], ['0', '2'], ['1','2'], ['2', '2'], ['3', '2']]
期望输出:
[['0', '2'], ['1','2'], ['2', '2'], ['3', '2'], ['0','1'], ['1', '1'], ['2','1'], ['0', '0']]
当前使用的错误代码:
sorted(table, key=lambda X: (int(X[1]),sorted(X[0],key=int)),reverse=True)
错误输出结果:
[['3','2'], ['2','2'], ['1','2'], ['0','2'], ['2','1'], ['1','1'], ['0','1'], ['0','0']]
询问如何修改才能实现仅Y值降序,同时保持X值升序?
解决方案
核心思路是:对Y值取负数来单独实现降序逻辑,X值保持正数实现升序,以此组合作为排序键,避免全局reverse=True同时反转两个维度的排序方向。
修改后的正确代码:
sorted(table, key=lambda x: (-int(x[1]), int(x[0])))
代码说明
-int(x[1]):将Y值转为整数后取负,原本更大的Y值会变成更小的负数,在排序时会被优先排列,实现Y值降序。int(x[0]):将X值转为整数直接作为次要排序键,遵循默认的升序逻辑,实现X值升序。- 无需设置
reverse=True,通过负号精准控制了Y的排序方向,同时保留X的升序规则。
运行该代码后,将得到你期望的排序结果。
内容的提问来源于stack exchange,提问作者Grayson Howard
相关产品推荐
相关产品推荐

