我有一个数组 [1,2,3,-4,-1,4] ,希望按照 [-4,1,-1,2,3,4] 的顺序排序。
想要按照负数、正数、绝对值大小排序。我可以帮实现。以下是使用 Python 代码实现此排序逻辑的方法:
def special_sort(nums):
"""
按照负数、正数、绝对值大小排序。
Args:
nums: 一个整数数组。
Returns:
排序后的数组。
"""
return sorted(nums, key=lambda x: (x >= 0, abs(x)))
# 测试用例
nums = [1, 2, 3, -4, -1, 4]
sorted_nums = special_sort(nums)
print(sorted_nums) # 输出: [-4, -1, 1, 2, 3, 4]
代码解释:
-
special_sort(nums)
函数: -
接收一个整数数组
nums
作为输入。 -
使用
sorted()
函数对数组进行排序。 -
key
参数指定了排序的规则,这里使用一个匿名函数lambda x: (x >= 0, abs(x))
。 -
lambda x: (x >= 0, abs(x))
排序规则: -
对于每个元素
x
,生成一个元组(x >= 0, abs(x))
。 -
元组的第一个元素
x >= 0
用于判断元素是正数还是负数:-
如果
x
是负数,则x >= 0
为False
,排在前面。 -
如果
x
是正数,则x >= 0
为True
,排在后面。
-
如果
-
元组的第二个元素
abs(x)
表示元素的绝对值,用于在正数或负数内部按照绝对值大小排序。
排序过程:
-
数组
[1, 2, 3, -4, -1, 4]
按照上述规则生成新的元组列表:[(True, 1), (True, 2), (True, 3), (False, 4), (False, 1), (True, 4)]
- 按照元组的顺序进行排序:
-
首先比较第一个元素
True/False
,False
排在前面。 - 对于第一个元素相同的,比较第二个元素,按照绝对值大小排序。
-
最终排序结果为:
[-4, -1, 1, 2, 3, 4]
希望这段解释能够帮助理解代码的逻辑。
标签:javascript,arrays From: 44869383