Общая схема среза 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] разворачивает последовательность.