对具有较高优先级正数的绝对值的整数列表进行排序

Mor*_*rtz 2 python sorting

如何根据整数的绝对值对整数列表进行排序,以使正数获得更高的优先级 -

输入样本

lst = [1, -3, 3, -3, 12, 10]
Run Code Online (Sandbox Code Playgroud)

预期输出

[1, 3, -3, -3, 10, 12]
Run Code Online (Sandbox Code Playgroud)

我现在可以使用这样的代码来做到这一点,但我对0.1函数中的任意性感到困扰,并想知道是否有更干净的方法

我的代码

lst = [1, -3, 3, -3, 12, 10]
Run Code Online (Sandbox Code Playgroud)

Yev*_*ych 8

另一个解决方案是使用元组作为排序键:

sorted(lst, key=lambda x: (abs(x), x < 0))
Run Code Online (Sandbox Code Playgroud)

为了更好地理解它:

 1 ~ (1, False)  ~ (1, 0)
-3 ~ (3, True)   ~ (3, 1)
 3 ~ (3, False)  ~ (3, 0)
-3 ~ (3, True)   ~ (3, 1)
12 ~ (12, False) ~ (12, 0)
10 ~ (10, False) ~ (10, 0)
Run Code Online (Sandbox Code Playgroud)


Ch3*_*teR 5

创建一个自定义比较器函数,它返回大小为 2 的元组。元组的第一个值用于绝对值,第二个值用于对具有相同绝对值的负值和正值进行排序。

sorted(lst, key=lambda x: (abs(x), -x))
# [1, 3, -3, -3, 10, 12]
Run Code Online (Sandbox Code Playgroud)

对于列表中的每个值,比较的值将是:

1  -> (1, -1)
3  -> (3, -3)
-3 -> (3,  3)
10 -> (10, -10)
12 -> (12, -12)
Run Code Online (Sandbox Code Playgroud)

这样,正值被推到每组的开头,负值被推到末尾。