Сортировка строки в лексикографическом порядке python - PullRequest
22 голосов
/ 10 сентября 2011

Я хочу отсортировать строку в списке в лексикографическом порядке как

str='aAaBbcCdE'

до

['A','a','a','B','b','C','c','d','E']

но sorted() дает мне такой вывод:

['A','B','C','E','a','a','b','c','d']

Как я могу отсортировать лексикографически?

Ответы [ 4 ]

31 голосов
/ 10 сентября 2011

Не используйте лямбда-функции, когда есть встроенные функции для работы.Также никогда не используйте аргумент cmp sorted, потому что он устарел:

sorted(s, key=str.lower)

или

sorted(s, key=str.upper)

Но это может не поддерживать порядок «A» и «a», поэтому:

sorted(sorted(s), key=str.upper)

, что, и по природе sorted операция будет очень быстрой для почти отсортированных списков (второй sorted).

11 голосов
/ 11 сентября 2011

Вы можете использовать 2-кортеж для ключа:

text='aAaBbcCdE'
sorted(text,key=lambda x:(str.lower(x),x))
# ['A', 'a', 'a', 'B', 'b', 'C', 'c', 'd', 'E']

Первый элемент в кортеже, str.lower(x) - это первичный ключ (заставляющий a предшествовать B), в то время как x сам разрывает связи (заставляя A предшествовать a).

4 голосов
/ 10 сентября 2011

cmp был старый способ сделать это, теперь не рекомендуется, но для потомков:

s='aAaBbcCdE'
sorted(s, lambda x,y: cmp(x.lower(), y.lower()) or cmp(x,y))
0 голосов
/ 20 мая 2018

data = input() data=list(data) data.sort()

Теперь для переменной «data» будет предоставлен лексикографически отсортированный ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...