Программа курса:
Разбор задачи: Сортировка символов по частоте
Предложенный нами код решения:
from collections import Counter
# Решение задачи
def frequency_sort(s):
# Подсчет частот символов
freq = Counter(s)
# Сортировка символов по частоте и затем по порядку появления в строке
sorted_chars = sorted(freq.keys(), key=lambda x: (-freq[x], x))
# Построение результирующей строки
return ''.join(char * freq[char] for char in sorted_chars)Данная функция сортирует строку по частотам символов, а при равной частоте символы располагаются в алфавитном порядке. Рассмотрим решение пошагово.
1. Импорт необходимых модулей
from collections import Counter
Для подсчета частот символов используется класс Counter из модуля collections. Он позволяет быстро создать словарь, где ключи — это символы строки, а значения — их частоты.
2. Определение функции
def frequency_sort(s):
Функция принимает строку s, которая может содержать повторяющиеся символы. Задача состоит в том, чтобы отсортировать символы этой строки по частотам.
3. Подсчет частот символов
freq = Counter(s)
С помощью Counter(s) создается словарь freq, в котором каждому символу строки соответствует количество его появлений. Например, если s = "tree", то freq будет следующим:
{'t': 1, 'r': 1, 'e': 2}
4. Сортировка символов
sorted_chars = sorted(freq.keys(), key=lambda x: (-freq[x], x))
Сортировка происходит следующим образом:
freq.keys()возвращает все символы из словаря частот.key=lambda x: (-freq[x], x)задает порядок сортировки:- Символы сортируются по убыванию частоты (
-freq[x]). - При равных частотах символы сортируются в алфавитном порядке (
x).
- Символы сортируются по убыванию частоты (
Например, для строки "tree" порядок сортировки символов будет таким:['e', 'r', 't'].
5. Построение результирующей строки
return ''.join(char * freq[char] for char in sorted_chars)
На этом шаге формируется результирующая строка:
- Для каждого символа из отсортированного списка
sorted_charsсимвол повторяется столько раз, сколько указано вfreq[char]. - Все части соединяются в одну строку с помощью
join.
Пример:
Если sorted_chars = ['e', 'r', 't'] и freq = {'t': 1, 'r': 1, 'e': 2}, то итоговая строка будет сформирована как:'e' * 2 + 'r' * 1 + 't' * 1 = "eert".
Пример работы функции
Вход:s = "tree"
freq = {'t': 1, 'r': 1, 'e': 2}sorted_chars = ['e', 'r', 't']- Результат:
"eert"
Выход:"eert"