Проблема с sorted() python
k = ['15', '10', '457', '23', '70']
print(sorted(k))
['10', '15', '23', '457', '70'] Почему сортировка работает не верно?
Ответы (2 шт):
Работает верно, только вот сортируются строки лексикографически ("по алфавиту"). Преобразуйте элементы списка в числа с помощью map
:
print(sorted(map(int, k)))
или создайте список целых с помощью спискового включения:
k = ['15', '10', '457', '23', '70']
m = [int(x) for x in k]
print(sorted(m))
Если же вы хотите оставить строки, то используйте функцию сравнения для сортировки
k = ['15', '10', '457', '23', '70']
print(sorted(k, key=int))
В более сложных случаях пригодится лямбда-функция
print(sorted(k, key = lambda x: int(x)))
Сначала сравниваются первые символы строк. Если они равны, сравниваются вторые символы и так далее.
Если одна строка является префиксом другой (как в случае "abc" и "abcd"), то более короткая строка считается "меньше". Поэтому "abc" стоит перед "abcd".