Получить доступ

Как работают срезы в Python?

JuniorКоллекции
Ещё спрашивают так:
  • Что делает запись a[1:5:2]?
  • Как развернуть список срезом?
Коротко

seq[start:stop:step] — новая последовательность с start включительно до stop не включая.

  • Отрицательные индексы считаются с конца: a[-1] — последний
  • a[::-1] — в обратном порядке, a[:] — поверхностная копия

А ещё Срез не бросает IndexError при выходе за границы

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Срез работает у списков, кортежей, строк, bytes и range. Все три части необязательны: start по умолчанию — начало, stop — конец, step — 1. При отрицательном шаге значения по умолчанию меняются местами, поэтому a[::-1] разворачивает последовательность.

Свойства, о которых спрашивают:

  • Срез создаёт новый объект. Для списка a[:] — поверхностная копия: сам список новый, вложенные объекты общие.
  • Выход за границы не ошибка. a[100:200] вернёт пустой список, тогда как a[100] бросит IndexError.
  • Присваивание срезу меняет список на месте и может менять его длину: a[1:3] = [9, 9, 9]. С шагом длины должны совпадать.
  • Удаление срезом: del a[::2] убирает каждый второй элемент.
  • Сложность — O(k), где k — длина результата.

Срез — объект slice(start, stop, step); свои классы поддерживают срезы через __getitem__, получая этот объект.

Пример

a = [0, 1, 2, 3, 4, 5]
a[1:4]     # [1, 2, 3]
a[-2:]     # [4, 5]
a[::2]     # [0, 2, 4]
a[::-1]    # [5, 4, 3, 2, 1, 0]
a[10:]     # [] — без ошибки

a[1:3] = ["x", "y", "z"]   # [0, 'x', 'y', 'z', 3, 4, 5]

"python"[::-1]             # 'nohtyp'

Что хотят услышать

  • Полуинтервал: start включается, stop — нет.
  • Отрицательные индексы и отрицательный шаг.
  • Срез — новый объект, a[:] — поверхностная копия.
  • Отсутствие IndexError при выходе за границы.

Частые ошибки

  • Считать, что stop входит в результат.
  • Думать, что a[:] копирует вложенные списки.

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем