按绝对值排序不改变绝对值

Sorting by absolute value without changing to absolute value

我想使用 abs() 对元组进行排序,而不实际将元组的元素更改为正值。

def sorting(numbers_array):
    return sorted(numbers_array, key = abs(numbers_array))


sorting((-20, -5, 10, 15))

根据 python wiki (https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions),sorted(list, key=) 函数假定使用参数 key 进行排序而不实际上改变了列表的元素。但是,abs() 只接受 int() 并且我还没有想出一种方法将那个元组变成一个 int,如果那是我需要做的。

你需要给key一个callable,一个函数或类似的调用;它将被排序序列中的每个元素调用。 abs 可以是可调用的:

sorted(numbers_array, key=abs)

您反而传入了 abs() 调用的 结果,这确实不适用于整个列表。

演示:

>>> def sorting(numbers_array):
...     return sorted(numbers_array, key=abs)
... 
>>> sorting((-20, -5, 10, 15))
[-5, 10, 15, -20]

因此,如果您想对这 4 个值(-20、-5、10、15)进行排序,则所需的输出将是: [-5, 10, 15, -20],因为你取的是绝对值。

所以这里是解决方案:

def sorting(numbers_array):
    return sorted(numbers_array, key = abs)


print(sorting((-20, -5, 10, 15)))
lst = [-1, 1, -2, 20, -30, 10]
>>>print(sorted(lst, key=abs))
>>>[-1, 1, -2, 10, 20, -30]