Python: уроки, справочник и задачи

lower() в Python: строчные буквы и сравнение без регистра

Раздел: Строки в Python · Обновлено 31.10.2026

Метод lower в Python возвращает копию строки, в которой все заглавные буквы заменены строчными, а цифры, пробелы и знаки препинания остаются без изменений. Чаще всего его применяют для сравнения строк без учета регистра, обработки ввода пользователя и очистки данных. Ниже показан синтаксис, родственные методы casefold(), upper() и title(), работа со списками и типичные ошибки.

lower() в Python: строчные буквы и сравнение без регистра
Фото: Typophile~commonswiki / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Синтаксис и результат
  2. Сравнение строк без учета регистра
  3. lower() и casefold()
  4. Другие методы для работы с регистром
  5. Нижний регистр для списков и словарей
    1. Первая буква в нижнем регистре
  6. Частые ошибки
  7. Частые вопросы
    1. Работает ли lower() с русскими буквами?
    2. Есть ли lower() у байтовых строк?
    3. Как проверить, что в строке нет заглавных букв?
    4. Чем lower() отличается от upper()?

Синтаксис и результат

Метод вызывается у строки через точку и не принимает аргументов. Он работает с любым алфавитом, который поддерживает Unicode, включая кириллицу.

text = "Привет, МИР! Python 3.12"
print(text.lower())  # привет, мир! python 3.12
print(text)          # Привет, МИР! Python 3.12

Вторая строка вывода показывает важное свойство: исходная строка не меняется. Строки в Python неизменяемые, поэтому lower() всегда создает новый объект. Чтобы сохранить результат, его присваивают переменной: text = text.lower().

Если вызвать метод у объекта другого типа, например у числа или None, получится AttributeError. В таких случаях значение сначала приводят к строке: str(value).lower().

Сравнение строк без учета регистра

Оператор == различает регистр: "Да" == "да" дает False. Если привести обе строки к одному регистру, сравнение будет учитывать только буквы.

answer = input("Продолжить? (да/нет): ").strip().lower()
if answer in ("да", "д", "yes", "y"):
    print("Продолжаем")
else:
    print("Выход")

Сочетание strip() и lower() убирает пробелы по краям и регистр, поэтому ответы " ДА ", "Да" и "да" обработаются одинаково. Подробнее о методе удаления пробелов рассказано в статье strip в Python.

Этот же прием работает для поиска подстроки без учета регистра:

title = "Уроки PYTHON для начинающих"
print("python" in title.lower())  # True

lower() и casefold()

Для большинства языков, включая русский и английский, оба метода дают одинаковый результат. Разница проявляется в символах, у которых нет простой пары в нижнем регистре. Самый известный пример - немецкая буква ß: она уже строчная, поэтому lower() ее не трогает, а casefold() заменяет на "ss".

word = "Straße"
print(word.lower())     # straße
print(word.casefold())  # strasse
print("STRASSE".lower() == word.lower())        # False
print("STRASSE".casefold() == word.casefold())  # True

Правило выбора: для отображения текста пользователю используйте lower(), а для сравнения строк, где могут встретиться символы разных языков, надежнее casefold(). Метод доступен с Python 3.3.

Другие методы для работы с регистром

У строк есть целое семейство методов для изменения регистра и его проверки. Все они возвращают новую строку или логическое значение.

МетодЧто делает"пРИВЕТ мир"
lower()все буквы строчныепривет мир
upper()все буквы заглавныеПРИВЕТ МИР
capitalize()первая буква заглавная, остальные строчныеПривет мир
title()каждое слово с заглавной буквыПривет Мир
swapcase()меняет регистр на противоположныйПривет МИР
casefold()агрессивное приведение для сравненияпривет мир
islower()True, если все буквы строчныеFalse
isupper()True, если все буквы заглавныеFalse

Метод islower() смотрит только на буквы: "abc123".islower() вернет True, а строка без букв, например "123", даст False. Полный список методов с примерами собран на странице методы строк Python.

Нижний регистр для списков и словарей

Метод работает только со строкой, у списка его нет. Чтобы привести к нижнему регистру все элементы, используют генератор списка или map().

tags = ["Python", "SQL", "Flask"]
print([t.lower() for t in tags])    # ['python', 'sql', 'flask']
print(list(map(str.lower, tags)))   # тот же результат

users = {"Anna": 5, "OLEG": 3}
print({k.lower(): v for k, v in users.items()})  # {'anna': 5, 'oleg': 3}

Если после приведения к одному регистру нужно убрать повторы, удобно сразу собрать множество: {t.lower() for t in tags}. В таблицах pandas для столбца со строками есть векторный вариант: df["city"].str.lower().

Первая буква в нижнем регистре

Отдельного метода, который делает строчной только первую букву, нет. Задачу решают срезом: первый символ переводят в нижний регистр и приклеивают остаток строки.

name = "ProductName"
print(name[:1].lower() + name[1:])  # productName

Срез [:1] не вызывает ошибку на пустой строке, в отличие от обращения по индексу [0]. Больше приемов со срезами есть в статье срезы в Python.

Частые ошибки

Описание всех строковых методов приведено в документации Python.

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

Ответы на вопросы, которые задают о методе lower().

Работает ли lower() с русскими буквами?

Да. Строки в Python 3 хранятся в Unicode, поэтому кириллица, буква Ё и другие алфавиты переводятся в нижний регистр без дополнительных настроек.

Есть ли lower() у байтовых строк?

Есть, но bytes.lower() меняет только латинские буквы A-Z. Русский текст в байтах сначала декодируют в строку методом decode().

Как проверить, что в строке нет заглавных букв?

Сравните строку с ее версией в нижнем регистре: s == s.lower(). Это работает и для строк без букв, в отличие от islower().

Чем lower() отличается от upper()?

Методы делают противоположное: lower() переводит буквы в строчные, upper() в заглавные. Синтаксис и поведение с цифрами и символами у них одинаковые.