Сортировать список строк по убыванию (по длине) - PullRequest
0 голосов
/ 17 марта 2020

Я бы хотел отсортировать список строк в порядке убывания их длины. Если имеется 2 или более строк одинаковой длины, порядок должен быть лексикографическим в порядке возрастания.

Input: ['a', 'bb', 'cc', 'ddd', 'bbc']

Expected Output: ['bbc', 'ddd', 'bb', 'cc', 'a']

В приведенном выше примере: список упорядочен в порядке убывания длины строк. Но так как длина строк 'bb' и 'cc' одинакова, они упорядочены лексикографически (в порядке возрастания).

У меня есть функция -

sorted(sample_list, key=lambda x: (len(x), x), reverse=True)

Однако x в лямбда-функции дает дополнительный параметр (в случае, если len(x) совпадает). Но так как я установил reverse=True, он сортирует строку в убывающем лексикографическом порядке, а не по возрастанию (когда len (x) равен).

Observed output from above code: ['ddd', 'bbc', 'cc', 'bb', 'a']

Я не Не знаю, какие изменения я могу внести в лямбда-функцию, чтобы приспособиться к этому условию.

Ссылки:

1 Ответ

1 голос
/ 17 марта 2020

Вы можете просто использовать (-len(x), x) вместо (len(x), x) и reverse=True.

>>> sample_list = ['a', 'bb', 'cc', 'ddd', 'bbc']
>>> sorted(sample_list, key=lambda x: (-len(x), x))
['bbc', 'ddd', 'bb', 'cc', 'a']

Сначала будет отсортирован список по убыванию длины (из-за -len(x)), а затем сортируйте строки одинаковой длины в лексикографическом порядке.

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