Строки в Python: индексы, срезы и методы

Статья Математика

Строка в Python — это неизменяемая последовательность символов типа str: каждый символ имеет индекс, один символ получают через квадратные скобки, а часть строки — срезом [start:stop:step]. Например, "PYTHON"[1:5] возвращает "YTHO", потому что граница stop в результат не входит.

Будем вести одну строку course = "STEMskills" от создания до готовой подписи. Так легче увидеть механизм: строка похожа на подписанную полку, где у каждого символа есть адрес. Граница аналогии важна: адрес помогает читать символ, но заменить символ на полке нельзя — строковые объекты в Python неизменяемы.

Как создать строку и увидеть её символы

Текст заключают в одинарные или двойные кавычки. Внутри одной программы обе формы равноправны: name = 'Ada' и name = "Ada" создают строки. Функция len(course) возвращает количество символов; у "STEMskills" их 10.

Карта строки course = "STEMskills"
Положительные и отрицательные индексы строки STEMskillsДесять символов от S до s. Положительные индексы идут от нуля до девяти, отрицательные — от минус десяти до минус одного.STEMskills0123456789−10−9−8−7−6−5−4−3−2−1

Положительная нумерация начинается с нуля: course[0] даёт "S", а course[4]"s". Отрицательные индексы идут справа: course[-1] даёт последний символ "s", course[-2] — предпоследний "l". Если обратиться к несуществующему одиночному индексу, например course[20], Python возбуждает IndexError.

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

Срезы: start входит, stop не входит

Срез записывают как text[start:stop]. Он берёт символ с позиции start и продолжает до позиции перед stop. Поэтому длина обычного среза без шага равна stop - start. Открытая правая граница удобна в программировании: соседние части text[:4] и text[4:] стыкуются без пропуска и повторения символа.

ВыражениеРезультатПочему
course[:4]"STEM"От начала до индекса 4, не включая его
course[4:]"skills"С индекса 4 до конца
course[-6:]"skills"Шесть последних символов
course[::2]"SEsil"Каждый второй символ от начала
course[::-1]"slliksMETS"Шаг −1 разворачивает порядок
Одна строка, разные маршруты по индексам.

Разобранный пример 1: выделяем название направления

Задача: из строки course = "STEMskills" получить "STEM". Первый символ имеет индекс 0, а буква M — индекс 3. Правая граница должна стоять после неё, поэтому пишем course[0:4] или короче course[:4]. Ответ: "STEM". Проверка: в результате четыре символа, а 4 - 0 = 4.

Разобранный пример 2: берём окончание неизвестной длины

Задача: получить слово "skills", не вычисляя длину всей строки. У нужной буквы s отрицательный индекс −6, а пропущенная правая граница означает «до конца». Пишем course[-6:]. Ответ: "skills". Независимая проверка справа налево даёт шесть символов: s, k, i, l, l, s.

Срез за пределами строки обычно не падает: course[:100] просто вернёт всю строку. Это отличается от одиночного индекса и полезно при безопасном ограничении подписи, например caption[:30].

Почему символ нельзя заменить на месте

Строка неизменяема: команда course[0] = "X" завершится ошибкой TypeError. Метод строки тоже не переписывает исходный объект, а возвращает новую строку. Например, после lower = course.lower() переменная lower хранит "stemskills", но course по-прежнему равна "STEMskills".

Чтобы «заменить» начало, собирают новое значение: course = "Data" + course[4:]. Срез сохраняет "skills", конкатенация добавляет "Data", и только присваивание связывает имя course с результатом "Dataskills". Модель полки здесь заканчивается: Python не двигает буквы в прежнем объекте, а создаёт новый объект и меняет ссылку переменной.

Методы строк для реальной обработки текста

В реальной жизни программы получают текст из форм, файлов и сообщений. Перед сравнением полезно убрать края методом strip() и привести регистр через lower(): answer.strip().lower(). Для разбиения строки подходит split(), а для склейки частей — separator.join(parts). Методы find() и оператор in помогают искать фрагмент; replace(old, new) создаёт копию с заменами.

Трассировка очистки пользовательской подписи
  1. raw = " Python, Строки "
  2. clean = raw.strip()"Python, Строки"
  3. parts = clean.split(",")["Python", " Строки"]
  4. tags = [part.strip().lower() for part in parts]["python", "строки"]

Каждый шаг возвращает новое значение; исходная строка raw остаётся прежней.

Почему индексы начинаются с нуля? Для последовательностей индекс удобно понимать как смещение от начала: у первого элемента смещение 0, у второго — 1. Это не историческая подробность ради памяти, а механизм, который объясняет и нулевой индекс, и формулу длины среза.

Проверьте прогноз до запуска

Тренажёр индексов и срезов

Выберите выражение, сначала предскажите результат, затем проверьте себя. Код пользователя не выполняется.

Выберите выражение и запишите ожидаемый результат.

Если тренажёр не загрузился, разберите первый случай вручную: у PYTHON[1:5] индексы 1, 2, 3, 4 соответствуют буквам Y, T, H, O, поэтому результат — YTHO. Правая граница 5 указывает, где остановиться, а не какой символ добавить.

Практика с ответами

Задача 1. Последний символ

Задача 1. Что вернёт "robot"[-1]? Ответ: "t". Индекс −1 выбирает последний символ непустой строки.

Задача 2. Две соседние части

Задача 2. Разделите "algorithm" после первых четырёх символов. Ответ: "algorithm"[:4] даёт "algo", а "algorithm"[4:] даёт "rithm". Обе части вместе снова образуют исходную строку.

Задача 3. Каждый второй символ

Задача 3. Найдите результат "АЛГОРИТМ"[::2]. Ответ: "АГРТ". Шаг 2 оставляет символы с индексами 0, 2, 4 и 6: А, Г, Р, Т.

Ошибки, которые полезно ловить заранее

  • Считать первый индекс единицей. Перед срезом подпишите над символами 0, 1, 2.
  • Включать позицию stop. Проговорите: «дойти до stop, но не брать его».
  • Путать индекс и срез за границей. text[100] вызывает ошибку, а text[:100] ограничивается концом строки.
  • Ждать изменения после метода. Сохраните результат: text = text.strip().
  • Разворачивать текст без объяснения. В [::-1] пустые границы охватывают строку, а шаг −1 задаёт движение справа налево.

Следующий шаг

Возьмите собственную короткую строку, подпишите положительные и отрицательные индексы, затем без запуска предскажите три результата: первый символ, последние три символа и строку с шагом 2. После проверки переходите к курсу «Алгоритмы на Python»: там работа с последовательностями становится частью алгоритмического мышления.

Оставить комментарий