2016-04-05 2 views
-4

У меня есть список чисел, который находится в форме строки, и я хочу отсортировать числа в нем. Как сортировать такие числа в python?Сортировка списка, который содержит числа в виде строки в python

Это мой список.

key_s=['115', '114', '117', '116', '111', '110', '113', '112', '68', '119', '118', '44', '45', '42', '43', '41', '76', '108', '109', '71', '107', '79', '13', '15', '14', '17', '16', '37'] 

Я попытался с помощью key_s.sort() .Это возвращает None вместо отсортированного массива. Я даже попробовал sorted(key_s), который даже не работает. Итак, каково решение его сортировки?

+0

упорядоченные (Key_S, ключ = INT) - для получения более подробной информации [прочитайте документацию] (https://docs.python.org/2/library/functions.html#sorted) – AndreyT

+0

'map (str, sorted (map (int, key_s)))'? – TheRandomGuy

+0

@Dhruv: Вы пытаетесь выиграть награду за злоупотребление функциональной парадигмой? –

ответ

4

Да, list.sort() сорта вместо и возвращает None, чтобы указать его является сам список, который был отсортирован. Функция sorted() возвращает новый отсортированный список, оставляя исходный список без изменений.

Использование int в качестве ключа:

sorted(key_s, key=int) 

Это возвращает нового списка, отсортированного по числовому значению каждой строки, но оставляя тип значений самих изменений.

Без ключа строки отсортированы лексикографически вместо этого, сравнивая характер по характеру. Таким образом '9' сортируется после'10', потому что символ '1' доходит до '9' в наборах символов, точно так же как 'a' предшествует 'z'.

Аргумент key позволяет применять Schwartzian_transform, информируя алгоритм сортировки о том, что нужно сортировать. Каждое значение в списке сортируется в соответствии с key(value) (так int(value) здесь) вместо самого исходного значения.

Демо:

>>> key_s = ['115', '114', '117', '116', '111', '110', '113', '112', '68', '119', '118', '44', '45', '42', '43', '41', '76', '108', '109', '71', '107', '79', '13', '15', '14', '17', '16', '37'] 
>>> sorted(key_s, key=int) 
['13', '14', '15', '16', '17', '37', '41', '42', '43', '44', '45', '68', '71', '76', '79', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119'] 
+0

@ Мартиджин О, хорошо. Спасибо –

+0

Хорошее объяснение. до-голосование. можете ли вы объяснить больше на 'key'? –

+0

@VivekSable: сделано. –

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