如何在单层中按模对列表进行排序

Анд*_*нко 2 python

我需要在一行中编写代码,该代码将显示一个排序的数组,在该数组上以负数为模(它们在屏幕上显示为负数)

例:

data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]

def is_module(x):
    if x < 0:
        return 0
    else:
        return 1

print(sorted([data[x] for x in range(len(data)) if is_module(data[x])]))
Run Code Online (Sandbox Code Playgroud)

我期望这样:

    [0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)

blh*_*ing 10

您可以将列表排序abs为主要功能:

sorted(data, key=abs)
Run Code Online (Sandbox Code Playgroud)

返回:

[0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)

如果希望始终在相同绝对值的正值之后对负值进行排序,则可以使用返回值的绝对值和负值的2元组的函数:

sorted(data, key=lambda n: (abs(n), -n))
Run Code Online (Sandbox Code Playgroud)