如何按子数组指定元素与0的接近程度排序二维数组
按子数组元素与0的接近程度排序二维数组
你需要根据子数组第三个元素与0的距离(绝对值大小)来排序,原代码的lambda x: x[2]是按元素本身的数值排序,而非到0的距离,所以不符合需求。
正确的做法是将key函数改为取第三个元素的绝对值,因为绝对值直接反映了该数与0的接近程度:
i = [[1,3,8],[1,7,4],[1,9,1],[1,0,3],[1,11,-2]] sorted_i = sorted(i, key=lambda x: abs(x[2])) print(sorted_i)
运行后输出结果正好是你想要的:[[1,9,1],[1,11,-2],[1,0,3],[1,7,4],[1,3,8]]
补充说明
如果遇到两个元素绝对值相同的情况(比如2和-2),Python的sorted是稳定排序,会保留它们在原数组中的相对顺序。如果需要额外的排序规则(比如绝对值相同时,负数排在正数前),可以将key改为元组:
sorted_i = sorted(i, key=lambda x: (abs(x[2]), x[2]))
内容的提问来源于stack exchange,提问作者Fabio Hagiwara
相关产品推荐
相关产品推荐

