Проблема с sorted() python

k = ['15', '10', '457', '23', '70']
print(sorted(k))

['10', '15', '23', '457', '70'] Почему сортировка работает не верно?


Ответы (2 шт):

Автор решения: MBo

Работает верно, только вот сортируются строки лексикографически ("по алфавиту"). Преобразуйте элементы списка в числа с помощью 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)))
→ Ссылка
Автор решения: Oopss

Сначала сравниваются первые символы строк. Если они равны, сравниваются вторые символы и так далее.
Если одна строка является префиксом другой (как в случае "abc" и "abcd"), то более короткая строка считается "меньше". Поэтому "abc" стоит перед "abcd".

→ Ссылка