Python 如何在一行中按模对列表排序

Python 如何在一行中按模对列表排序,python,Python,我需要在一行中写一个代码,它将显示一个排序数组,其中负元素取模(它们在屏幕上显示为负) 例如: data = [4, -30, 100, -100, 123, 1, 0, -1, -4] output: [0, 1, -1, 4, -4, -30, 100, -100, 123] 您可以使用abs键功能对列表进行排序: sorted(data, key=abs) 这将返回: [0, 1, -1, 4, -4, -30, 100, -100, 123] 如果希望负值总是在相同绝对值的正值之后

我需要在一行中写一个代码,它将显示一个排序数组,其中负元素取模(它们在屏幕上显示为负)

例如:

data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]

您可以使用
abs
键功能对列表进行排序:

sorted(data, key=abs)
这将返回:

[0, 1, -1, 4, -4, -30, 100, -100, 123]
如果希望负值总是在相同绝对值的正值之后排序,可以使用返回值的绝对值和负值的2元组的函数:

sorted(data, key=lambda n: (abs(n), -n))

这确实会为给定的输入生成所需的输出,但我有点担心,因为结果对数字的起始排列很敏感。例如,
sorted([2,-1,1],key=abs)
sorted([2,1,-1],key=abs)
返回顺序不同的结果,即使列表包含所有相同的数字。True。我已经更新了我的答案来解释这种可能性。
[0, 1, -1, 4, -4, -30, 100, -100, 123]
sorted(data, key=lambda n: (abs(n), -n))