Вы можете использовать itertools.groupby()
, чтобы добиться этого следующим образом:
from itertools import groupby
my_str = 'AADDADCBBB'
tup = [(i, len(list(l))) for i, l in groupby(my_str)]
где tup
– это список кортежей, содержащих алфавит, и его счетчик выглядит следующим образом:
[('A', 2), ('D', 2), ('A', 1), ('D', 1), ('C', 1), ('B', 3)]
Теперь, чтобы отсортировать этот кортеж на основе количества алфавитов, а затем на основе лексикографического приоритета, вы можете использовать sorted()
с ключом lambda x: (-x[1], x[0])
.
Здесь -[1]
будет сортировать кортеж в порядке убывания значения элемента с индексом 1
st. Если это значение одинаково для нескольких кортежей, вторичная сортировка будет выполнена по x[0]
. Он будет сортироваться на основе элемента, присутствующего в индексе 0
th, в порядке возрастания.
Например:
from operator import itemgetter
sorted_tup = sorted(tup, key=lambda x: (-x[1], x[0]))
где sorted_tup
будет содержать значение:
[('B', 3), ('A', 2), ('D', 2), ('A', 1), ('C', 1), ('D', 1)]
person
Anonymous
schedule
06.03.2021