Булево решение Hacker Rank ginortS.py - PullRequest
0 голосов
/ 04 ноября 2019

Как эти коды производят вывод "ginortS1324" с вводом "Sorting1234"?

Я понимаю различные логические функции, isdigit(), islower(), c in '02468'. Вопрос здесь заключается в том, как все это работает вместе для получения этого результата?

print(*sorted(input(), key=lambda c: (c.isdigit() - c.islower(), c in '02468', c)), sep='')

1 Ответ

0 голосов
/ 04 ноября 2019

Очень помогает распечатать ключи для функции 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.

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