Подтвердить что ты не робот

Как сортировать целые числа в алфавитном порядке

Как я могу сортировать целые числа в алфавитном порядке? Вот так:

integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0]

напечатан как на консоли Python

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

Я пробовал это

def sort_integers(integers):
    return sorted(integers)

но я думаю, вы должны сделать это таким образом

def sort_integers(integers):
    return sorted(integers, key = lambda....... )

Я просто не знаю, что написать после лямбды?

4b9b3361

Ответ 1

sorted(integers, key=str)

->
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

Объяснение: str - это функция, которая отличает целые числа в строки. Поскольку sorted сортирует строки по алфавиту по умолчанию, это делает именно то, что вы просили.

Ответ 2

Вы можете просто использовать str как key:

sorted(integers,key=str)

Итак, здесь для каждого элемента вызывается функция str, которая преобразует int в str ing. Это само по себе не зрелищно. Но сравнение строк отличается: оно сортируется лексикографически.

>>> sorted([0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222],key=str)
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

Ответ 3

Если вы хотите отсортировать свои целые слова лексикографически, как если бы они были строками, вы можете сказать Python рассматривать их как строки при сортировке:

>>> integers = [10, 1, 101, 2, 111, 212, 100000, 22, 222, 112, 10101, 1100, 11, 0]
>>> sorted(integers, key=lambda n: str(n))
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]
>>> 

Но вам даже не нужно иметь часть lambda n: .... Вы можете просто передать функцию str как key, и Python будет знать, что делать. вызов str(n), где n - это каждый элемент в вашем списке:

>>> sorted(integers, key=str)
[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]
>>>

Таким образом, ваша функция будет выглядеть следующим образом:

def sort_integers(integers):
    return sorted(integers, key=str)

Ответ 4

это будет работать

list(map(int, (sorted(str(i) for i in integers))))

выход:

[0, 1, 10, 100000, 101, 10101, 11, 1100, 111, 112, 2, 212, 22, 222]

Ответ 5

Попробуйте Самая значимая цифра Radix Sort. Это позволяет избежать преобразования целых чисел в строки, но более жестко реализовать, если вы не используете библиотеку или другой предварительно написанный код.