Python: срезы
Пять минут на эту статью — и «Python: срезы» станет понятнее. Внутри: теория без воды, пример, разбор задания и чек-лист самопроверки.
Python: срезы — быстрый способ работать с последовательностями
Если при решении задачи приходится вручную выбирать элементы строки или списка, легко запутаться в индексах и пропустить нужное значение. Срезы Python помогают взять целую часть последовательности одной короткой записью: от начала до конца, через шаг или в обратном порядке. Разберём правило, научимся читать такую запись и закрепим навык на понятных примерах.
Срез можно применять к строкам, спискам, кортежам и другим последовательностям. Общий вид выглядит так:
последовательность[начало:конец:шаг]
строка[1:5]
числа[::2]
Индексы в Python начинаются с нуля. Поэтому у строки «Python» символ P имеет индекс 0, y — индекс 1, а последний символ можно обозначить индексом −1.
Главное правило: левая граница включается в результат, а правая не включается. Срез [1:4] возьмёт элементы с индексами 1, 2 и 3. Такой подход называют полуинтервалом: начало входит, конец остаётся за границей.
Как устроен срез
Начало показывает, откуда брать элементы. Если его не написать, Python начинает с начала последовательности. Конец показывает, где остановиться. Если конец пропущен, срез продолжается до конца. Шаг задаёт расстояние между выбранными элементами; по умолчанию он равен 1.
слово = "информатика"
слово[0:4] → "инфо"
слово[4:] → "рматика"
слово[:4] → "инфо"
слово[::2] → "иноиа"
Отрицательные индексы отсчитываются справа налево. Индекс −1 обозначает последний элемент, −2 — предпоследний. Это удобно, когда длина строки или списка заранее неизвестна.
цвета = ["красный", "жёлтый", "зелёный", "синий"]
цвета[-2:] → ["зелёный", "синий"]
цвета[:-1] → ["красный", "жёлтый", "зелёный"]
Срез не изменяет исходную строку или список, если ты только читаешь результат. Python создаёт отдельную последовательность. Поэтому можно безопасно сохранять часть данных в новой переменной.
Шаг и разворот последовательности
Шаг равен третьим элементом записи и может быть положительным или отрицательным. При шаге 2 берётся каждый второй элемент, при шаге 3 — каждый третий. Нулевой шаг использовать нельзя: программа сообщит об ошибке, потому что двигаться с нулевой скоростью невозможно.
числа = [0, 1, 2, 3, 4, 5, 6, 7]
числа[1:7:2] → [1, 3, 5]
числа[::3] → [0, 3, 6]
Особенно полезен шаг −1. Он читает последовательность справа налево и позволяет быстро получить разворот строки или списка.
текст = "Python"
текст[::-1] → "nohtyP"
числа[::-1] → [7, 6, 5, 4, 3, 2, 1, 0]
Перед вычислением среза подпиши индексы над элементами. Особенно это помогает при отрицательном шаге: сначала пойми направление движения, затем проверь границы.
Если шаг отрицательный, обычно начало ставят правее конца. Например, [5:1:−1] включает индексы 5, 4, 3 и 2, но не индекс 1.
Разобранный пример
Рассмотрим задачу: дана строка с символами, записанными через пробел. Нужно получить символы с чётными индексами, начиная с первого символа, и затем вывести результат в обратном порядке.
данные = "a b c d e f g"
часть = данные[::2]
ответ = часть[::-1]
print(часть)
print(ответ)
Результат:
abcdefg
gfedcba
Разберём решение по шагам. В строке пробелы тоже занимают позиции, поэтому здесь важно не перепутать условие с другой строкой без пробелов. Срез данных[::2] начинает с индекса 0 и выбирает каждый второй символ. В результате остаются буквы a, b, c, d, e, f и g.
Затем срез часть[::-1] проходит по полученной строке справа налево. Значение переменной часть не меняется: развёрнутая копия сохраняется в ответ. Если задача требует изменить список, можно присвоить срезу новые значения, но со строками так поступить нельзя, потому что строки неизменяемы.
Потренироваться на похожих коротких задачах можно в личном кабинете с бесплатной практикой: после каждого ответа легче сразу сверить ход рассуждений.
Типичные ошибки и проверка записи
Самая частая ошибка — считать правую границу включительной. Запись список[2:5] содержит индексы 2, 3 и 4. Если нужно включить элемент с индексом 5, поставь правую границу 6.
| Запись | Что делает |
|---|---|
| а[2:6] | элементы от индекса 2 до 5 |
| а[:4] | первые четыре элемента |
| а[3:] | от индекса 3 до конца |
| а[::−1] | полный разворот |
Вторая ошибка — забыть, что индекс 0 является первым. Третья — ожидать ошибку при слишком большой границе. Python обычно спокойно возвращает доступную часть последовательности. Например, [1:100] у короткого списка возьмёт элементы от 1 до конца.
Срез [::-2] идёт с конца и берёт каждый второй элемент, а [::−2] записывается с тем же смыслом. Но [0:−1:−1] обычно даст пустой результат: направление и границы не согласованы.
Перед запуском проверь три вещи: где находится стартовый индекс, включается ли нужный элемент в диапазон и совпадает ли знак шага с направлением движения.
Что запомнить
Срез записывается как [начало:конец:шаг]. Начало включается, конец не включается. Пропущенное начало означает движение от первого элемента, пропущенный конец — движение до последнего. Индексы могут быть отрицательными, а шаг −1 разворачивает последовательность.
Для уверенного решения задач полезно не заучивать отдельные результаты, а каждый раз мысленно отмечать индексы. Сначала определи направление, затем выпиши старт, границу и шаг. Такой алгоритм работает и со строками, и со списками.
Зарегистрируйся и реши 5 заданий бесплатно в личном кабинете, чтобы закрепить тему практикой. Если готовишься к экзамену, дополнительные задания по программированию можно искать в разделе ОГЭ или ЕГЭ.
Можно ли использовать срезы только со строками и списками?
Нет. Срезы работают со многими последовательностями, например с кортежами и диапазонами. Главное, чтобы объект поддерживал обращение по индексам и срезам.
Почему правая граница не входит в результат?
Так устроено правило полуинтервала Python. Благодаря ему длина среза без шага равна разности границ, а соседние диапазоны удобно соединять без повторов.
Что произойдёт, если срез выходит за длину списка?
Обычно Python не выдаёт ошибку, а возвращает доступную часть. Однако при обращении к одному элементу по несуществующему индексу возникнет IndexError.
Как закрепить тему после разбора?
Реши несколько задач с разными границами, отрицательными индексами и шагами. Полезно сначала предсказать результат вручную, а затем проверить его в Python и объяснить каждую позицию.
Проверь себя на реальных заданиях
После такого разбора решите 5–7 заданий подряд — и тема ваша. Тренажёр Просто Урок подберёт их автоматически и объяснит ошибки по шагам. Бесплатно.