В КУРСЕ?

Разбираемся в теме

Казань записана тремя способами: как Python помогает сравнивать строки аккуратно

В одном списке город записан с большой буквы, в другом полностью прописными, а в третьем окружён случайными пробелами. Для человека это может быть одно название, но прямое сравнение строк даст различия. Перед поиском и подсчётом полезно определить правило нормализации. При этом удобное сравнение не должно незаметно уничтожать исходные данные или объединять разные объекты.

Сначала сформулируйте, какие различия несущественны

В учебной задаче считаем несущественными пробелы в начале и конце названия и различия регистра букв. Другие изменения пока не разрешаем. Это ограничение важно: исправление опечаток, перестановка слов и объединение похожих названий относятся к отдельным задачам. Если начать удалять все неудобные символы без правила, можно потерять значимые различия. Нормализация должна быть понятным преобразованием для конкретной цели, а не попыткой сделать любые строки одинаковыми.

Два метода решают две небольшие задачи

У строк Python метод strip без аргументов удаляет пробельные символы по краям. Он не предназначен для удаления всех пробелов внутри названия. Метод casefold возвращает вариант строки, удобный для сравнения без учёта регистра. В учебном примере к каждой записи последовательно применяют strip и casefold. Три варианта названия Казань, включая запись прописными буквами и запись с пробелами по краям, дадут одинаковый ключ казань. Это результат объявленного правила, а не географическая проверка.

Исходное значение полезно сохранить

Для отображения пользователю может понадобиться аккуратное название с привычным регистром, а для разбора ошибок — первоначальная запись. Поэтому удобно различать исходную строку, очищенное представление и ключ сравнения. Если заменить все данные ключами, позднее будет труднее понять, откуда появилась странная запись. Также название города само по себе не всегда достаточно для идентификации объекта в реальной системе. Учебное совпадение строк не доказывает, что две записи относятся к одному месту во всех возможных данных.

Проверяйте пустые и похожие значения

Строка из одних пробелов после strip становится пустой. Её нужно обработать явно, а не считать обычным названием. Запись Казань-2 после выбранных преобразований сохранит отличие от Казани. Метод casefold не исправляет опечатки и не дописывает пропущенные буквы. Для проверки полезен набор примеров, в котором есть ожидаемые совпадения и ожидаемые различия. Иначе легко заметить только успешное объединение трёх удобных строк и пропустить нежелательное объединение других.

Попробуйте на практике

Разберите небольшой список названий на бумаге или в собственном учебном Python-файле.

  1. Подготовьте пять записей: Казань, КАЗАНЬ, Казань с пробелами по краям, строку из трёх пробелов и Казань-2. Сохраните исходный список отдельно.
  2. Для каждой записи сначала примените или смоделируйте strip без аргументов. Отметьте, какая строка стала пустой.
  3. К непустым результатам примените или смоделируйте casefold. Сравните ключи трёх первых названий.
  4. Проверьте, что Казань-2 остаётся отдельным ключом. Объясните, почему выбранное правило не должно удалять цифру и дефис.
  5. Составьте три проверки: ожидаемое совпадение, ожидаемое различие и отдельная обработка пустого результата. Подпишите границы: это сравнение строк, а не доказательство тождества географических объектов.

Как проверить результат. Первые три записи дают ключ казань, пробельная строка становится пустой, а казань-2 остаётся отличным значением. Исходные записи сохранены для проверки.

Частые вопросы

Можно ли вместо casefold использовать только перевод в нижний регистр?

Для некоторых простых примеров результаты совпадут, но casefold специально предназначен для сравнения без учёта регистра и учитывает больше языковых особенностей.

Удалит ли strip пробел в середине названия?

Без аргументов он удаляет пробельные символы по краям. Внутренние пробелы требуют отдельного правила, если задача действительно предполагает их изменение.

Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.

Зарегистрируйтесь, чтобы уточнить возможность доступа к этому материалу

Зарегистрироваться
← К списку материалов