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