Манипуляции со строками в Python — полное руководство
TL;DR
Python предоставляет богатый набор инструментов для работы со строками: создание, индексирование, срезы, объединение, форматирование (f-строки), методы split/join и функции ord/chr/len. Строки в Python неизменяемы: операции возвращают новые строки. Знайте про кодовые точки Unicode и ошибки IndexError/TypeError — они помогают отлавливать некорректный доступ.
Что такое строка
Строка — это последовательность символов (кодовых точек Unicode). Она неизменяема: любые изменения создают новую строку.

Основные варианты создания строк в Python
Создать строку просто: присвойте литерал переменной. Можно использовать одинарные, двойные или тройные кавычки.
str1 = 'Hello!'
str2 = "Hello!"
str3 = """Hello!"""
str4 = '''Hello!'''
print(str1)
print(str2)
print(str3)
print(str4)Вывод:
Hello!
Hello!
Hello!
Hello!Преимущество двойных кавычек — внутри них можно писать одинарную кавычку без экранирования:
s = "Using 'single quote' inside double quotes"
print(s)Вывод:
Using 'single quote' inside double quotesДля многострочных литералов используйте тройные кавычки — переносы сохраняются без \n:
s1 = """This is a multiline
string using three double quotes"""
s2 = "This is a multiline\nstring using double quotes"
print(s1)
print(s2)Вывод:
This is a multiline
string using three double quotes
This is a multiline
string using double quotesДоступ к символам: индексирование и срезы
Если нужен один символ — используйте индекс (indexing). Если диапазон — используйте срез (slicing).
Индексирование
Индексы строк в Python начинаются с 0. Допускается отрицательная нумерация: -1 — последний символ, -2 — предпоследний.
s = "MAKEUSEOF"
# Полная строка
print(s)
# 1-й символ
print(s[0])
# 2-й символ
print(s[1])
# Последний символ
print(s[-1])
# 2-й с конца
print(s[-2])Вывод:
MAKEUSEOF
M
A
F
OПри обращении по индексу используйте целые числа — иначе возникнет TypeError. При выходе за диапазон возникает IndexError.
Пример TypeError:
s = "MAKEUSEOF"
print(s[1.5]) # TypeError: string indices must be integersПример IndexError:
s = "MAKEUSEOF"
print(s[88]) # IndexError: string index out of rangeСрезы (slicing)
Срезы позволяют получить подпоследовательность с помощью двоеточия (start:stop:step). Практические варианты:
s = "MAKEUSEOF"
# От 0 (включительно) до 4 (исключая)
print(s[0:4])
# От 3-го с конца (включительно) до последнего (исключая)
print(s[-3:-1])
# От индекса 2 до конца
print(s[2:])
# От начала до индекса 6 (исключая)
print(s[:6])Вывод:
MAKE
EO
KEUSEOF
MAKEUSСовет: при отрицательном step срезы идут в обратную сторону: s[::-1] возвращает строку в обратном порядке.
Операторы для строк
Конкатенация: +
Оператор + объединяет строки.
s1 = "MAKE"
s2 = "USE"
s3 = "OF"
s = s1 + s2 + s3
print(s) # MAKEUSEOFПовторение: *
Оператор * повторяет строку заданное число раз.
s = "MUO-"
print(s * 5)
print(2 * s)
x = 3
print(s * x)Вывод:
MUO-MUO-MUO-MUO-MUO-
MUO-MUO-
MUO-MUO-MUO-Членство: in / not in
Оператор in проверяет, содержится ли подстрока в строке; возвращает True или False. not in — обратное.
s = "MAKEUSEOF"
print("MAKE" in s) # True
print("H" in s) # False
print("Hello" not in s) # True
print("M" not in s) # FalseЭкранированные последовательности
Для спецсимволов используйте обратную косую черту (backslash, ). Например, чтобы вставить одинарную кавычку в одинарно-кавычечный литерал:
s = 'We are using apostrophe \' in our string'
print(s)Вывод:
We are using apostrophe ' in our stringПолезные escape-последовательности: \n — новая строка, \t — табуляция, \ — сам backslash.
Важное замечание о Unicode: некоторые визуально один символы состоят из нескольких кодовых точек (combining marks). len() считает кодовые точки, а не визуальные «графемы».
Вставка переменных (интерполяция) — f-строки
F-строки (f”…”) позволяют вставлять выражения прямо в литерал.
s1 = "Piper"
s2 = "a"
s3 = "pickled"
str = f"Peter {s1} picked {s2} peck of {s3} peppers"
print(str)
a = 1
b = 2
c = a + b
print(f"Sum of {a} + {b} is equal to {c}")Вывод:
Peter Piper picked a peck of pickled peppers
Sum of 1 + 2 is equal to 3Совет по безопасности: никогда не выполняйте eval() над строками, полученными от пользователей. F-строки сами по себе не исполняют код, но комбинирование с eval небезопасно.
Встроенные функции для строк
len()
Возвращает длину строки (количество кодовых точек).
s = "MAKEUSEOF"
print(len(s)) # 9ord() и chr()
ord(c) — кодовая точка символа; chr(i) — символ по числовому коду.
print(ord('M')) # 77
print(ord('a')) # 97
print(chr(77)) # 'M'
print(chr(36)) # '$'str()
Преобразует объект в строку.
num = 73646
s = str(num)
print(s)
print(type(s)) # Разбиение и объединение строк
split()
Разбивает строку по разделителю и возвращает список.
str1 = "Peter-Piper-picked-a-peck-of-pickled-peppers"
splitted_list1 = str1.split('-')
print(splitted_list1)
str2 = "We surely shall see the sun shine soon"
splitted_list2 = str2.split(' ')
print(splitted_list2)Вывод:
['Peter', 'Piper', 'picked', 'a', 'peck', 'of', 'pickled', 'peppers']
['We', 'surely', 'shall', 'see', 'the', 'sun', 'shine', 'soon']join()
Объединяет элементы итерируемого объекта в строку, используя заданный разделитель.
list1 = ["I", "thought", "I", "thought", "of", "thinking", "of", "thanking", "you"]
str1 = "-".join(list1)
print(str1)
list2 = ["Ed", "had", "edited", "it"]
str2 = " ".join(list2)
print(str2)Вывод:
I-thought-I-thought-of-thinking-of-thanking-you
Ed had edited itКогда операции со строками дают сбой — частые ошибки и примеры
- Неправильный тип индекса: s[1.5] → TypeError: string indices must be integers.
- Выход за пределы: s[100] → IndexError: string index out of range.
- Путаница bytes vs str: методы строк (например, .split()) работают с str; для байтов используйте bytes/bytearray и соответствующие методы.
- Unicode: len() считает кодовые точки, но визуальная длина может отличаться при наличии комбинирующих знаков.
Альтернативы и смежные подходы
- bytes/bytearray: для бинарных данных. bytes — неизменяемый, bytearray — изменяемый.
- io.StringIO: для накопления большого текста эффективнее, чем многократная конкатенация.
- textwrap и locale: для форматирования и локализации текста.
Краткая шпаргалка (cheat sheet)
- Создание: ‘a’, “a”, ‘’’a’’’.
- Индексация: s[i], s[-1].
- Срезы: s[start:stop:step], s[::-1] — реверс.
- Объединение: +, str.join(iterable).
- Повторение: * n.
- Форматирование: f”{expr}”.
- Разбиение/соединение: .split(sep), sep.join(list).
- Длиной: len(s).
- Кодовые точки: ord(c), chr(i).
Мини-методология: как подойти к задаче обработки строк
- Определите тип данных: str или bytes?
- Выясните требуемую кодировку и нормализацию Unicode (если данные из внешних источников).
- Избегайте множественной конкатенации в циклах; используйте list + join или StringIO.
- Покройте граничные случаи тестами: пустая строка, очень длинная строка, строки с Unicode-комбинирующими символами.
Тесты и критерии приёмки
Критерии приёмки:
- Функция корректно обрабатывает пустую строку.
- Индексация и срезы возвращают ожидаемые подстроки.
- При выходе за диапазон бросается IndexError.
- При неверном типе индекса бросается TypeError.
- Для локализованных данных применяется нужная нормализация Unicode.
Примеры тест-кейсов:
- input: “abc”, index 1 → ‘b’.
- input: “abc”, slice [0:2] → ‘ab’.
- input: “”, split(‘,’) → [‘’] или [] в зависимости от контракта.
Ролевые чек-листы
- Для разработчика:
- Использовать str для текстовых данных.
- Проверить кодировку при чтении/записи файлов.
- Не использовать eval для строк от пользователя.
- Для тестировщика:
- Проверить граничные условия и Unicode-сценарии.
- Проверить поведение при больших объемах и производительность.
Короткий словарь (1 строка)
- строка: последовательность кодовых точек Unicode; неизменяема.
- кодовая точка: численное представление символа (ord/chr).
- графема: визуальный символ, может состоять из нескольких кодовых точек.
Когда не использовать строковые методы
- Для двоичных протоколов (используйте bytes).
- Для очень частой мутации текста в циклах (лучше StringIO или list+join).
Итог
Строки — фундаментальная часть Python. Понимание неизменяемости, индексирования, срезов и особенностей Unicode помогает писать корректный и эффективный код. Используйте f-строки для удобной интерполяции, split/join для разбиения и объединения, и помните про отличие str и bytes.
Важное: тестируйте граничные сценарии и учитывайте нормализацию Unicode при работе с внешними источниками.
Похожие материалы
Защитить Plex-сервер через Raspberry Pi и HTTPS
Чёткие контурные линии в Procreate
CSS Modules в React — локальные стили без конфликтов
Создать ISO из папки в Windows через CMD
Как сделать снимок экрана на ноутбуке