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

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

示例输入

lst = [1, -3, 3, -3, 12, 10]

预期输出

[1, 3, -3, -3, 10, 12]

我现在可以用这样的代码来完成它,但我对函数中的任意 0.1 感到困扰,想知道是否有更简洁的方法

我的代码

sorted(lst, key=lambda x: abs(x) if x >= 0 else abs(x) + 0.1)
# [1, 3, -3, -3, 10, 12]

最佳答案

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

sorted(lst, key=lambda x: (abs(x), x < 0))

为了更好地理解它:

 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)

https://stackoverflow.com/questions/72490213/

相关文章:

android - 我正在尝试使用安全参数,但是当我将依赖项添加到项目级别 build.gradle

.net - 不可变对象(immutable对象)的约定

python - Julia 代码没有完成而 Python 代码完成了

ruby - Rails 将数组合并为数组的数组

php - 在创建 PHP 类实例时运行代码?

asp.net - 在 .net 中,是否有与 Server.HTMLEncode() 相反的函数?

perl - 为什么 Scalar::Util::Numeric 安装不正确?

r - 提取特定格式的部分字符串

perl - 如何将 Data::Dumper 输出转换回 Perl 数据结构?

r - 如何提取R中的第一个字符串