2015-01-12 2 views
1

Я хочу сортировать кортеж с помощью abs() без фактического изменения элементов кортежа до положительных значений.Сортировка по абсолютной величине без изменения абсолютного значения

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


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

Согласно питона вики (https://wiki.python.org/moin/HowTo/Sorting/#Key_Functions), отсортированного (список, ключ =) функция предположим для сортировки с параметром ключ, фактически не изменяя элементы списка. Однако abs() принимает только int(), и я не разработал способ сделать этот кортеж в int, если это то, что мне нужно сделать.

+0

Подождите, вы пытаетесь разобраться кортеж, а не список здесь. Это намеренно? – BlackVegetable

+1

'sorted ((- 20, -5, 10, 15), key = lambda v: -v, если v <0 else v)' является альтернативой более правильным 'sorted ((- 20, -5, 10, 15), key = abs) ' – dawg

ответ

5

key a , функция или аналогичный вызову; он будет вызываться для каждого элемента в сортируемой последовательности. 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] 
+0

Я не скопировал ваш ответ. Я просто набрал его, когда вы ответили;) – ProgrammingIsAwsome

+0

@ProgrammingIsAwsome: Я не думал, что вы это сделали :-) Во-первых, я использовал интервал PEP-8 для аргумента ключевого слова, которого вы не сделали. –

+0

Хорошо, я понимаю ключ = теперь немного лучше. Это сработало, спасибо –

2

Так что, если вы хотите отсортировать эти 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))) 
+0

@MartijnPieters: Edited. Я все еще использую Python 2.7, потому что не все еще упущено 3,x. Но я уверен, что вы знаете больше об этом, чем мне. – ProgrammingIsAwsome

+1

Нет проблем, FTFY –

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

Можете ли вы дать некоторое объяснение, как ваш ответ решает проблему? Это помогает будущим пользователям, которые ищут ту же проблему. – Chrismas007

Смежные вопросы