Представьте, что вы сортируете носки по ящикам. Вы берёте носок и смотрите на его «признак» — например, цвет. Все носки одного цвета летят в один ящик. Здесь «ящик» — это группа, а «цвет» — общий признак.
В задаче Group Anagrams общий признак анаграмм — это их отсортированный набор букв. Слова «eat», «tea», «ate» после сортировки букв превращаются в одинаковый «отпечаток» "aet". Этот отпечаток и есть «ящик», куда мы складываем все слова-анаграммы.
Условие
Дан списокИзменяемая упорядоченная коллекция элементов: [1, 2, 3]. По-английски list. слов. Сгруппировать вместе слова, являющиеся анаграммами друг друга.
У анаграмм одинаковый набор букв. Если слово отсортировать по буквам, у всех анаграмм получится одинаковая строкаТекстовое значение в кавычках: "привет". Неизменяема. По-английски string (str).-«отпечаток». Используем её как ключ словаряКоллекция пар «ключ → значение»: {"a": 1}. Быстрый доступ по ключу. По-английски dict., а значением — список слов с этим отпечатком.
▶ group-anagrams.py
Разбор по строкам
groups = {} — словарь «отпечаток → список слов с этим отпечатком». Это наши «ящики».
key = "".join(sorted(word)) — вычисляем отпечаток слова: сортируем буквы и склеиваем обратно в строку.
if key not in groups: groups[key] = [] — если такого ящика ещё нет, создаём пустой список.
groups[key].append(word) — кладём слово в нужный ящик.
return list(groups.values()) — возвращаем все ящики (списки слов) без ключей.
📝Заметка
sorted("eat") даёт список символов ['a','e','t'], а "".join(...) склеивает их обратно в строку "aet". У «eat», «tea» и «ate» этот отпечаток одинаковый — значит, они попадут в одну группу.
💡Совет
🔮 Предскажите вывод
Сколько групп получится для ["abc","bca","xy","yx","z"]? Подумайте, какие слова — анаграммы друг друга, прежде чем запускать.
▶ predict-group.py
Групп будет 3: ["abc","bca"] (отпечаток "abc"), ["xy","yx"] (отпечаток "xy") и ["z"] (отпечаток "z"). Здесь же показан удобный приём groups.setdefault(key, []).append(word) — он заменяет проверку «если ключа нет, создай список» одной строкой.
⚠️ Частые ошибки новичков
Частая ошибка — использовать как ключ сам sorted(word) (список), а не строку. Списки нельзя класть в ключи словаря — будет TypeError: unhashable type: 'list'. Запустите сломанный код, прочитайте ошибку и почините: оберните результат в "".join(...).
▶ broken-group.py
Заданиесредняярешение.py
Реализуйте group_anagrams(words): верните список групп анаграмм. Используйте отсортированное слово как ключ словаря.
Заданиесредняярешение.py
Дополнительное упражнение. Напишите count_anagram_groups(words), которая возвращает число групп анаграмм (то есть сколько различных «отпечатков» среди слов).
❓Проверь себя
Почему отсортированное слово работает как ключ для группировки анаграмм?
Что делает groups.setdefault(key, [])?
Почему sorted(word) нельзя класть в ключ словаря напрямую?
ℹ️Важно
✅ Что вы узнали
Группировка по «отпечатку» — мощный приём: общий признак становится ключом словаря.
Отпечаток анаграммы — это "".join(sorted(word)).
dict.setdefault(key, []) упрощает накопление списков в словаре.
Ключами словаря могут быть только хешируемые объектыКонкретный экземпляр класса — со своими данными. Почти всё в Python является объектом. — строки годятся, списки нет.
Комментарии
Загрузка…
Загрузка комментариев…