Применение функции sorted для списка
Есть список:
test = ['1', '0.1', '3', '80', 'abc', '0.4']
Как я могу отсортировать его, чтобы на выходе получился следующий результат:
test = ['0.1', '0.4', '1', '3', '80', 'abc']
Я делал следующим образом
test=sorted(test, key=lambda x: float(x) if x.isdigit() else x)
Но выпадает ошибка, так что не знаю как отсортировать вместе со словами('abc')
Ответы (4 шт):
Можно сделать вот так:
test = ['1', '0.1', '3', '80', 'abc', '0.41', '21', '0.2', 'xyz']
def get_key(x):
try:
return (float(x), '')
except:
return (float("inf"), x)
test=sorted(test, key=get_key)
print(test)
Вывод:
['0.1', '0.2', '0.41', '1', '3', '21', '80', 'abc', 'xyz']
Просто как строки весь список нельзя сортировать, тогда, например, будет такой порядок: '1', '21', '3', нужна именно сортировка чисел как чисел, а не как строк. В вашем то примере можно и как строки сортировать, но если будут другие входные данные, которые привёл я - так не заработает.
Можно воспользоваться модулем natsort:
from natsort import natsorted # pip install natsort
test = ['123', '2000', 'Z', '0.1', '0.4', '1', '3', '80', 'abc']
natsorted(test)
>>> ['0.1', '0.4', '1', '3', '80', '123', '2000', 'Z', 'abc']
Еще вариант:
test.sort(key=lambda x: float(x) if x.replace('.', '', 1).isdigit() else float('inf'))
Правда есть ограничения: только для положительных чисел.
Для сортировки списка содержащего float, int, str вы можете использовать встроенный метод sorted, c параметром key=repr.
Пример:
>>> test = ['1', '0.1', '3', '80', 'abc', '0.4']
>>> print(sorted(test, key=repr))
['0.1', '0.4', '1', '3', '80', 'abc']