Python - Как отсортировать список буквенных и числовых значений? - PullRequest
0 голосов
/ 05 октября 2018

Существует ли быстрый способ сортировки этого списка:

list = ['J', 'E', 3, 7, 0]

, чтобы получить этот (сначала числовой, а затем буквенный) в python?:

list = [0, 3, 7, 'E', 'J']

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Если вы будете использовать list.sort() в своем списке, вы получите

TypeError: '<' not supported between instances of 'int' and 'str'

Вы должны преобразовать все элементы в списке в строковый тип.

[str(i) for i in list]
0 голосов
/ 05 октября 2018

Поскольку вы имеете дело с числами (которые в данном случае <10) и строками, вы можете упростить свой ключ и удалить <code>lambda:

>>> sorted(lst, key=str)
[0, 3, 7, 'E', 'J']

Или, что еще лучше,используйте list.sort для сортировки на месте.

>>> lst.sort(key=str)
>>> lst
[0, 3, 7, 'E', 'J']

Каждый элемент будет отсортирован на основе значения ASCII значения str.

Обратите внимание, что если вы имеете дело с числами> = 10 (весьма вероятно), то это решение в конечном итоге приведет к сортировке чисел лексикографически.Чтобы обойти это, вам в конечном итоге понадобится лямбда.

>>> lst.sort(key=lambda x: (isinstance(x, str), x)))

Что является решением @ jpp.

0 голосов
/ 05 октября 2018

Вы можете сортировать с кортежем (логическое значение):

L = ['J', 'E', 3, 7, 0]

res = sorted(L, key=lambda x: (isinstance(x, str), x))

# [0, 3, 7, 'E', 'J']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...