Обработка строк в Python: срезы, методы и форматирование
Неизменяемость строк str, расширенные срезы [start:stop:step], методы split, join, replace, find, strip, форматирование f-строк.
Строка в языке Python (тип данных str) — это неизменяемая упорядоченная последовательность символов Юникода, заключенная в одинарные ('...') или двойные ("...") кавычки.
Каждый символ строки имеет свой индекс, начиная с 0 (слева направо) и с -1 (справа налево). Длина строки определяется функцией len(s).
КРИТИЧЕСКОЕ СВОЙСТВО: строки в Python являются НЕИЗМЕНЯЕМЫМИ (Immutable) объектами! Это означает, что после создания строки нельзя заменить отдельную букву по индексу: команда s[0] = 'A' вызовет ошибку TypeError: 'str' object does not support item assignment. Любая операция со строкой создает в памяти абсолютно новую строку.
Строка (str)
Неизменяемость
Срез позволяет извлечь из строки любую подстроку с помощью синтаксиса s[start:stop:step]:
• start — индекс первого включаемого символа (по умолчанию 0);
• stop — индекс границы среза (символ с этим индексом НЕ включается!);
• step — шаг выборки символов (по умолчанию 1).
Примеры на строке s = "Информатика":
• s[0:4] → "Инфо" (символы с индексами 0, 1, 2, 3);
• s[4:] → "рматика" (от индекса 4 до конца);
• s[:3] → "Инф" (первые 3 символа);
• s[::2] → "Ифрмаиа" (каждый второй символ);
• s[::-1] → "акитамрофнИ" (разворот строки задом наперед!).
Срез s[::-1] — стандартный алгоритм проверки, является ли слово палиндромом (читается одинаково слева направо и справа налево, например «шалаш», «казак»): if s == s[::-1]: print("Палиндром").
Срез s[start:stop:step]
s[::-1]
Строки обладают богатым набором встроенных методов (вызываются через точку: строка.метод()):
• s.find(sub) — возвращает индекс первого вхождения подстроки sub (или -1, если подстрока не найдена);
• s.count(sub) — подсчитывает количество вхождений подстроки sub в строку s;
• s.replace(old, new) — возвращает новую строку, где все вхождения old заменены на new;
• s.split(sep) — разбивает строку на список слов по разделителю sep (по умолчанию по пробелам). Незаменим при считывании чисел в одну строку: a, b = map(int, input().split());
• sep.join(list) — склеивает список строк в одну строку через разделитель sep;
• s.strip() — удаляет лишние пробелы и символы перевода строки в начале и в конце строки;
• s.lower() и s.upper() — переводят символы соответственно в нижний и верхний регистр.
split()
join()
Начиная с версии Python 3.6, главным стандартом формирования строк стали f-строки (форматированные строковые литералы).
Перед строкой ставится буква f, а внутри строки в фигурных скобках { } можно указывать любые переменные и математические выражения:
name = "Алихан"
print(f"Ученик {name} набрал {score} баллов из 100 ({score / 100:.1%})!")
Форматирование f-строками работает в несколько раз быстрее старых методов (%) и конкатенации (+), делая код предельно читаемым.
