Как работает слайсинг [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] разворачивает последовательность.

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

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