Строки в Python: методы и операции
Строки в Python (str): создание, перенос строки, срезы и подстроки, поиск, методы строк в таблице, удаление символов, список строк и подсчёт строк в тексте.
Содержание · 14 разделов
- Как создать строку
- Новая строка и экранирование
- Как вывести строку: print
- Индексы и срезы: как получить подстроку
- Операции со строками
- Как найти подстроку в строке
- Методы строк Python: таблица
- Строки неизменяемы: как удалить символ или подстроку
- Массив строк: список строк
- Количество строк, символов и слов
- Перебор строки в цикле
- Частые ошибки
- TypeError: can only concatenate str (not “int”) to str
- Метод вызван, а строка не изменилась
- IndexError: string index out of range
- Проблемы с обратной косой чертой
- Частые вопросы
- Как проверить, что строка пустая?
- Как сделать заглавной только первую букву?
- Как получить код символа и символ по коду?
- Как перевести строку в байты и обратно?
- Как оставить в строке только цифры?
- Итог
Строка в Python — это тип str: неизменяемая последовательность символов Unicode. Короткий ответ: строка создаётся в кавычках ("Python" или 'Python'), символ берётся по индексу s[0], подстрока — срезом s[1:4], а методы строк вроде upper(), replace() и split() всегда возвращают новую строку и не меняют исходную.
Ниже — как создать строку и сделать перенос строки, как вывести строку, взять подстроку, найти текст, какие есть методы строк в Python и как работать со списком строк. Отдельным методам — split, join, replace, strip и f-строкам — посвящены свои статьи, здесь они даны кратко со ссылками. Примеры проверены на Python 3.12.
Как создать строку
Строку записывают в одинарных или двойных кавычках — разницы нет. Тройные кавычки позволяют писать текст в несколько строк. Любой объект превращается в строку функцией str():
a = 'Привет'
b = "Python"
c = """Первая строка
Вторая строка"""
d = str(42)
print(c)
print(repr(d)) # → '42'
print(type(b)) # → <class 'str'>
print(isinstance(b, str)) # → True
Первая строка
Вторая строка
Тип строки в Python — str, проверять его удобнее через isinstance(). Отдельного типа «символ» нет: один символ — это строка длины 1. Об остальных встроенных типах — в статье о переменных и типах данных.
Новая строка и экранирование
Специальные символы внутри строки записывают через обратную косую черту. Новая строка (перенос) — \n, табуляция — \t:
print("Строка 1\nСтрока 2")
print("Колонка\tзначение")
print("Он сказал: \"Да\"")
print('It\'s ok')
print(len("a\nb")) # → 3
Строка 1
Строка 2
Колонка значение
Он сказал: "Да"
It's ok
3
\n — это один символ, поэтому длина "a\nb" равна 3. Сама обратная черта записывается как \\. Для путей Windows и регулярных выражений удобнее сырые строки с префиксом r — в них \ не экранирует ничего:
print("C:\\Users\\anna") # → C:\Users\anna
print(r"C:\Users\anna\new") # → C:\Users\anna\new
Как вывести строку: print
Функция print() выводит строку и в конце добавляет перевод строки. Несколько аргументов разделяются пробелом; разделитель меняет параметр sep, окончание — end:
name = "Анна"
print("Привет,", name) # → Привет, Анна
print("a", "b", "c", sep="-") # → a-b-c
print("без перевода строки", end="")
print(" — продолжение") # → без перевода строки — продолжение
print(f"Привет, {name}!") # → Привет, Анна!
Чтобы вставить переменную в строку, используйте f-строку, как в последней строке примера. Форматирование чисел, выравнивание и другие возможности — в статье об f-строках.
Индексы и срезы: как получить подстроку
Символы нумеруются с нуля, отрицательные индексы считают с конца. Срез s[start:stop:step] возвращает подстроку от start включительно до stop не включительно:
s = "Python"
print(s[0]) # → P
print(s[-1]) # → n
print(s[0:2]) # → Py
print(s[2:]) # → thon
print(s[:-1]) # → Pytho
print(s[::2]) # → Pto
print(s[::-1]) # → nohtyP (строка задом наперёд)
print(s[1:100]) # → ython (срез не выходит за границы)
Обращение к несуществующему индексу вызывает IndexError, а срез с границами за пределами строки просто обрезается — ошибки не будет.
Операции со строками
| Операция | Пример | Результат |
|---|---|---|
| Сложение | "Py" + "thon" | 'Python' |
| Повторение | "-" * 10 | '----------' |
| Проверка вхождения | "th" in "Python" | True |
| Длина | len("Привет") | 6 |
| Сравнение | "apple" < "banana" | True |
| Индекс и срез | "Python"[1:3] | 'yt' |
Строки сравниваются посимвольно по кодам Unicode, поэтому все заглавные латинские буквы «меньше» строчных: "Z" < "a" вернёт True. Для сравнения без учёта регистра приводите обе строки к одному регистру: a.lower() == b.lower().
Как найти подстроку в строке
Проще всего проверить вхождение оператором in. Если нужна позиция — find() или index():
text = "мама мыла раму"
print("мыла" in text) # → True
print(text.find("мыла")) # → 5
print(text.find("папа")) # → -1
print(text.rfind("м")) # → 12 (поиск с конца)
print(text.index("раму")) # → 10
print(text.count("ма")) # → 2
print(text.startswith("мама")) # → True
print(text.endswith((".txt", "раму"))) # → True
find() возвращает -1, если подстроки нет, а index() в этом случае выбрасывает ValueError: substring not found. В startswith() и endswith() можно передать кортеж вариантов. Для поиска по шаблону (цифры, e-mail, слова) используйте модуль re.
Методы строк Python: таблица
Все методы строк возвращают новый объект, поэтому результат нужно сохранить в переменную.
| Метод | Что делает | Пример → результат |
|---|---|---|
upper() / lower() | верхний / нижний регистр | "мир".upper() → 'МИР' |
capitalize() | первая буква заглавная, остальные строчные | "привет, мир" → 'Привет, мир' |
title() | каждое слово с заглавной | "привет, мир" → 'Привет, Мир' |
swapcase() | меняет регистр каждой буквы | "ПрИвЕт" → 'пРиВеТ' |
casefold() | «агрессивный» нижний регистр для сравнения | "Straße" → 'strasse' |
strip(), lstrip(), rstrip() | убирает пробелы по краям | " hi ".strip() → 'hi' |
replace(old, new) | заменяет подстроку | "a-b".replace("-", "+") → 'a+b' |
split(sep) | делит строку в список | "a b".split() → ['a', 'b'] |
sep.join(list) | соединяет список в строку | "-".join(["a", "b"]) → 'a-b' |
find(), index(), count() | поиск и подсчёт подстроки | "aaa".count("a") → 3 |
startswith(), endswith() | проверка начала и конца | "file.py".endswith(".py") → True |
removeprefix(), removesuffix() | убирает префикс / суффикс (Python 3.9+) | "report.pdf".removesuffix(".pdf") → 'report' |
zfill(n) | дополняет нулями слева | "7".zfill(3) → '007' |
center(), ljust(), rjust() | выравнивание до заданной ширины | "py".center(10, "*") → '****py****' |
isdigit(), isalpha(), isalnum(), isspace() | проверка состава строки | "2026".isdigit() → True |
Подробно о самых востребованных методах: split — разделение строки, join — соединение списка в строку, replace — замена подстроки и strip — удаление пробелов. Полный перечень — в документации по методам str.
Методы проверки работают буквально: "-12".isdigit() вернёт False, потому что минус — не цифра. Как надёжно превратить такую строку в число, рассказано в статье о преобразовании числа в строку и обратно.
Строки неизменяемы: как удалить символ или подстроку
Изменить символ строки «на месте» нельзя:
s = "Python"
s[0] = "J" # → TypeError: 'str' object does not support item assignment
Вместо этого собирают новую строку и присваивают её той же переменной: s = "J" + s[1:] даст 'Jython'. По тому же принципу удаляют части строки:
s = "Hello, world!"
print(s.replace(",", "")) # → Hello world! (удалить все запятые)
i = 5
print(s[:i] + s[i + 1:]) # → Hello world! (удалить символ по индексу)
print(s.removeprefix("Hello, ")) # → world! (удалить начало)
Если нужно удалить строку из списка строк, это уже операция над списком — remove() по значению или del по индексу. Пустые строки удобно отфильтровать генератором:
words = ["яблоко", "груша", "слива"]
words.remove("груша")
print(words) # → ['яблоко', 'слива']
lines = ["один", "", "два", " ", "три"]
print([line for line in lines if line.strip()]) # → ['один', 'два', 'три']
Массив строк: список строк
В Python вместо массива строк используют список (list). С ним работают обычные операции списка, а строковые методы применяют к каждому элементу через генератор:
fruits = ["яблоко", "груша", "слива"]
print(fruits[1]) # → груша
print(len(fruits)) # → 3
print(sorted(fruits)) # → ['груша', 'слива', 'яблоко']
print([f.upper() for f in fruits]) # → ['ЯБЛОКО', 'ГРУША', 'СЛИВА']
print(", ".join(fruits)) # → яблоко, груша, слива
print(max(fruits, key=len)) # → яблоко
print(list("abc")) # → ['a', 'b', 'c']
list("abc") разбивает строку на символы, а split() — на слова. Подробнее о списках — в статье о списках в Python.
Количество строк, символов и слов
len() возвращает количество символов. Количество строк в тексте считают через splitlines(), количество слов — через split():
text = "первая\nвторая\nтретья"
print(len(text.splitlines())) # → 3
print(len("Привет, мир")) # → 11
print(len("Привет, мир".split())) # → 2
Для файла строки считают при чтении: sum(1 for _ in open("data.txt", encoding="utf-8")) — файл не загружается в память целиком.
Перебор строки в цикле
Строка — итерируемый объект, цикл for проходит по её символам. Если нужен ещё и индекс, используйте enumerate():
for i, ch in enumerate("кот"):
print(i, ch)
0 к
1 о
2 т
Частые ошибки
TypeError: can only concatenate str (not “int”) to str
Строку нельзя сложить с числом — Python не преобразует типы сам:
age = 30
print("Мне " + age + " лет") # → TypeError: can only concatenate str (not "int") to str
print("Мне " + str(age) + " лет") # → Мне 30 лет
print(f"Мне {age} лет") # → Мне 30 лет
Обратная ситуация: "5" + "5" даёт '55', а не 10 — значения из input() всегда строки.
Метод вызван, а строка не изменилась
s = "python"
s.upper()
print(s) # → python
s = s.upper()
print(s) # → PYTHON
Методы строк возвращают новую строку и не меняют исходную. Присвойте результат переменной.
IndexError: string index out of range
Индекс больше или равен длине строки. Последний символ — s[-1] или s[len(s) - 1], а не s[len(s)]. Перед обращением к первому символу проверяйте, что строка не пустая: if s:.
Проблемы с обратной косой чертой
Путь "C:\Users\anna" вызывает SyntaxError: \U Python читает как начало escape-последовательности. Пишите r"C:\Users\anna", удваивайте черту или используйте прямые слеши.
Частые вопросы
Как проверить, что строка пустая?
Пустая строка в условии считается ложью, поэтому достаточно if not s:. Строка из одних пробелов пустой не считается; чтобы отсеять и её, проверяйте s.strip():
s = " "
print(not s) # → False
print(not s.strip()) # → True
Как сделать заглавной только первую букву?
capitalize() переводит остальные буквы в нижний регистр. Если их нужно сохранить, соберите строку из первого символа и остатка:
s = "привет, Мир"
print(s.capitalize()) # → Привет, мир
print(s[:1].upper() + s[1:]) # → Привет, Мир
Срез s[:1] работает и для пустой строки, где s[0] вызвал бы IndexError.
Как получить код символа и символ по коду?
ord() возвращает номер символа в Unicode, chr() делает обратное преобразование:
print(ord("A"), ord("Я")) # → 65 1071
print(chr(97), chr(8364)) # → a €
Как перевести строку в байты и обратно?
encode() превращает str в bytes в заданной кодировке, decode() возвращает строку. В UTF-8 кириллическая буква занимает 2 байта, поэтому длины различаются:
data = "Привет".encode("utf-8")
print(len("Привет"), len(data)) # → 6 12
print(data.decode("utf-8")) # → Привет
Как оставить в строке только цифры?
Отфильтруйте символы методом isdigit() и соберите результат через join(). Для сложных правил подойдёт re.sub() с шаблоном.
text = "Заказ №42 от 05.10"
print("".join(ch for ch in text if ch.isdigit())) # → 420510
Итог
Строка в Python — неизменяемый str: подстроку берут срезом, позицию ищут через find() или in, а методы вроде upper(), replace() и split() возвращают новую строку, которую нужно сохранить. Для переменных в тексте используйте f-строки, для списка строк — генераторы и join(). Остальные конструкции языка собраны в шпаргалке по синтаксису Python.
- #Python
- #str
- #Строки
- #Синтаксис