按绝对值排序而不更改为绝对值

时间:2015-01-12 15:25:45

标签: python sorting python-3.x

我想使用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),sort(list,key =)函数假设使用参数 key 进行排序,而不实际更改列表的元素。但是,abs()只接受int()而我没有找到一种方法将该元组变成int,如果这是我需要做的。

3 个答案:

答案 0 :(得分:7)

你需要给key一个可调用的,一个函数或者类似于call;它将被排序的序列中的每个元素调用。 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]

答案 1 :(得分:1)

因此,如果要对这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)))

答案 2 :(得分:0)

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