Как работает слайсинг [start:stop:step]?

Слайсинг (срезы) seq[start:stop:step] возвращает подпоследовательность того же типа (список, строка и т.п.), двигаясь от индекса start к stop с шагом step. Индекс start включителен, stop — исключителен (элемент с индексом stop не попадает в результат), step задаёт шаг (может быть отрицательным, тогда идём справа налево).

Подробный ответ

Общая схема среза start:stop:step

Базовый синтаксис слайсинга для последовательностей (списки, строки, кортежи и т.д.): seq[start:stop:step]

start — индекс первого включённого элемента (по умолчанию начало последовательности).

stop — индекс первого не включаемого элемента (по умолчанию конец последовательности).

step — шаг, с которым берутся элементы (по умолчанию 1).

Примеры:

nums = [0, 1, 2, 3, 4, 5]
nums[1:4]    # [1, 2, 3]  (берём индексы 1, 2, 3; 4 не включаем)
nums[:3]     # [0, 1, 2]  (от начала до индекса 3, не включая)
nums[2:]     # [2, 3, 4, 5]  (от индекса 2 до конца)
nums[::2]    # [0, 2, 4]  (каждый второй элемент)

Короткое правило, которое хотят услышать на собеседованиях: start включён, stop исключён, step задаёт шаг.

Отрицательные индексы и шаг

Слайсинг поддерживает отрицательные индексы и отрицательный шаг. Отрицательные start и stop считают от конца, как в обычной индексации: -1 — последний, -2 — предпоследний и т.д.

nums = [0, 1, 2, 3, 4, 5]
nums[-3:]    # [3, 4, 5]  (последние 3 элемента)
nums[:-1]    # [0, 1, 2, 3, 4]  (всё, кроме последнего)

Отрицательный step означает движение в обратную сторону.

nums[::-1]   # [5, 4, 3, 2, 1, 0] — разворот
nums[5:2:-1] # [5, 4, 3] — от индекса 5 до индекса 2, НЕ включая 2

Для отрицательного шага значения по умолчанию меняются: если start опущен, берётся конец последовательности, если stop опущен — идём до начала (не включая позицию «перед началом»).

Как объяснить на собеседовании

Слайсинг seq[start:stop:step] возвращает подпоследовательность. Индекс start включён, stop исключён, step задаёт шаг. Если какие‑то параметры опущены, используются значения по умолчанию: от начала, до конца, шаг 1. Отрицательные индексы считают от конца, а отрицательный шаг позволяет идти справа налево, например seq[::-1] разворачивает последовательность.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге