如何实现以0开头、不优先排列负数的自定义列表排序?
定制排序实现方案
直接用Python内置的sorted()函数,通过自定义排序键就能实现你的需求,不用修改原有代码逻辑,只需要把生成的列表传入这个排序函数即可。
核心代码
def custom_sort(num_list): # 排序规则:0优先在前,其余按绝对值升序,同绝对值负数在前 return sorted(num_list, key=lambda x: (x != 0, abs(x), x > 0))
验证示例
- 示例1输入:
[0, -2, 1, -3, 2, -4, 3, -5, 4, -6]
输出:[0, 1, -2, 2, -3, 3, -4, 4, -5, -6] - 示例2输入:
[0, 1, 5, 9, -2, 2, -5, -9, -1]
输出:[0, -1, 1, -2, 2, -5, 5, -9, 9] - 示例3输入:
[12, -12]
输出:[-12, 12]
排序逻辑说明
排序键是一个三元组(x != 0, abs(x), x > 0),利用元组的逐位比较特性:
- 第一维度
x != 0:0的该值为False(对应排序权重0),其他数为True(权重1),确保0始终排在最前面 - 第二维度
abs(x):按数值的绝对值从小到大排序,保证整体是升序的逻辑 - 第三维度
x > 0:同绝对值的数中,负数的该值为False(权重0),正数为True(权重1),所以负数排在正数前面
内容的提问来源于stack exchange,提问作者momo123321
相关产品推荐
相关产品推荐

