Очень помогает распечатать ключи для функции sorted
:
>>> cs = "Sorted1234"
>>> for c in cs:
... print((c.isdigit() - c.islower(), c in '02468', c))
...
...
(0, False, 'S')
(-1, False, 'o')
(-1, False, 'r')
(-1, False, 't')
(-1, False, 'e')
(-1, False, 'd')
(1, False, '1')
(1, True, '2')
(1, False, '3')
(1, True, '4')
Символы в строке сортируются с этими кортежами в качестве ключа. Первый элемент имеет наивысший приоритет, затем идет второй и так далее. Теперь, если мы посмотрим, мы увидим, что все строчные буквы имеют -1
в качестве первого элемента. Это самое низкое число, поэтому все они на первом месте. Второй элемент False
для всех из них. Так что теперь они отсортированы в алфавитном порядке, поскольку третий элемент - это сам символ.
Это объясняет deort
.
Теперь в качестве первого элемента добавляется только 0
, который принадлежит S
.
Это расширяет объясняемую строку до deortS
.
Теперь давайте посмотрим на числа. Все они являются цифрами, но islower()
возвращает False
, поэтому первый элемент в кортеже - 1
. Далее они сортируются по второму элементу;сначала False
, а затем True
. Это дает 1324
.
В результате получается строка deortS1324
.