Индексы и срезы строк в Python
Автор: Казачкин Даниил Михайлович · Обновлено
Слева нумерация начинается с 0, справа доступны отрицательные индексы: -1 обозначает последний символ. Срез text[start:stop:step] создаёт новую строку и не включает позицию stop.
Каждый символ строки имеет индекс. Слева нумерация начинается с 0, справа доступны отрицательные индексы: -1 обозначает последний символ. Срез text[start:stop:step] создаёт новую строку и не включает позицию stop.
Одна строка — разные представления
word = 'python'
print(word[0])
print(word[-1])
print(word[1:4])
print(word[::-1])Результат:
p
n
yth
nohtypСрез 1:4 берёт индексы 1, 2 и 3. Пустые границы означают начало или конец, а шаг -1 идёт справа налево.
Индекс строг, срез терпим
Обращение word[20] вызывает IndexError, потому что такой позиции нет. Срез word[:20] безопасно вернёт всю строку. Перед прямым доступом по вычисленному индексу проверьте 0 <= index < len(word).
Строки неизменяемы: присваивание word[0] = 'P' недопустимо. Новое значение строят, например, как 'P' + word[1:]. Типичная ошибка — считать первый символ индексом 1 или ожидать включения правой границы. Выпишите индексы над буквами короткого слова, прежде чем чинить формулу наугад.
Инициалы и окончание
Прочитайте слово длиной не меньше двух символов. Выведите первые две буквы, последние две и строку без первого и последнего символа. Для «программа» ожидаются «пр», «ма» и «рограмм». Затем проверьте слово из двух букв и объясните, почему средний срез пуст. Дополнительно определите, является ли введённая строка палиндромом, сравнив её с обратным срезом.
Границы срезов
Для слова «алгоритм» предскажите результаты срезов [:3], [3:], [1:7:2], [-3:] и [20:30]. Подтвердите, что последний безопасно пуст, тогда как прямой индекс 20 вызывает ошибку. Постройте функцию safe_char(text, index), которая возвращает символ либо None после проверки диапазона, включая отрицательные индексы выбранного контракта. Затем соберите новое слово заменой первого символа, не пытаясь изменить исходную строку. Зафиксируйте разницу: индекс выбирает один существующий элемент, срез описывает границы новой последовательности и мягко обрезается по длине.
Практикум: срезы и проверка палиндрома
Для строки алгоритм получите первые три символа, последние три, каждый второй и обратную запись. Для каждого среза подпишите начало, исключённый конец и шаг. Затем нормализуйте фразу без пробелов и регистра и сравните её с обратной строкой для проверки палиндрома. Протестируйте пустую строку, один символ и строку нечётной длины. Попробуйте индекс за пределами и такой же срез: зафиксируйте различие между IndexError и безопасным усечением диапазона.
Контрольная точка
Что означает отрицательный индекс и почему text[-1] не равен срезу text[-1:] по типу результата? Предскажите оба значения для непустой строки.
Частые вопросы
Срез изменяет исходную строку?
Нет. Строки неизменяемы, а срез создаёт новое строковое значение. Чтобы сохранить преобразование, его связывают с новым или прежним именем явно.