Что такое срезы в Python

Что такое срезы в Python

Срезы — это одна из самых часто используемых механик в языках программирования. Что они делают в Python, зачем нужны и как ими пользоваться читайте в нашей статье!

Срез (slice) — механизм, который позволяет выбирать определенную часть последовательности, такой как строка, список или кортеж. Срезы формируются при помощи квадратных скобок «[]» и двоеточия «:». Синтаксис среза выглядит так:

i_object[start:stop:step]

Где:

  • i_object — это итерируемый объект (последовательность)
  • start — индекс начала среза. Выбираются элементы начиная с него, включая сам элемент под этим индексом. Если он не указывается, то отсчет начинается с 0 индекса
  • stop — индекс окончания среза. Выбираются элементы до него, при этом элемент под этим индексом не включается результат среза. Если он не указывается, то автоматически считается последний элемент в итерируемом объекте
  • step — шаг. Если он не указывается, то по умолчанию равен 1.
Важно! Срез в Python не изменяет исходный итерируемый объект, а создает новый объект, содержащий выбранные элементы исходного объекта. При этом исходный объект остается неизменным.

Для чего нужны срезы

С помощью срезов можно извлекать подстроки из строк, подмножества из списков, а также производить другие операции над последовательностями. Вот полный список того, что можно делать с помощью срезов:

  • Получать часть данных из последовательности
  • Выбирать элементы последовательности с определенным интервалом
  • Изменять порядок элементов, в том числе разворачивать элементы в обратном порядке
  • Создавать копии последовательности.

Срез списка

Список (англ. list) в Python — это структура данных, представляющая собой упорядоченную коллекцию элементов, которые могут быть различных типов данных: числа, строки, другие списки. Давайте рассмотрим как делать срез списка на примере:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8]
 
# Извлечем числа от 3 до 6 (не включая 6)
result_1 = numbers[3:6]
print(result_1)  # Выведет [3, 4, 5]

# Извлечем числа начиная с 0 до 3 (включительно)
result_2 = numbers[:4]
print(result_2) # Выведет [0, 1, 2, 3]

# Извлечем числа с 3 и до конца
result_3 = numbers[3:]
print(result_3) # Выведет [3, 4, 5, 6, 7, 8]

Срез кортежа

Кортеж (англ. tuple) в Python — это упорядоченная неизменяемая коллекция элементов. Основное отличие кортежей от списков заключается в том, что кортежи не могут быть изменены после создания. Элементы кортежа могут быть любого типа данных, таких как числа, строки, списки и другие кортежи. Но так как срезы не изменяют итерируемые объекты, то принцип работы с кортежами такой же, как и со списками:

my_tuple = ('апельсин', 'банан', 'вишня', 'финик', 'голубика')
new_slice = my_tuple[1:4]

print(new_slice) # Выведет  (',банан', 'вишня', 'финик')

Срез строки: как извлекать подстроку из строки

Срезы удобно использовать для извлечения подстрок из строки. Например, для разбиения текста на слова или выделения ключевых фраз. Для этого указывается диапазон индексов через двоеточие:

  • Ситуация 1: давайте извлечем срез строки text с индекса 1 по индекс 3. То есть возьмем символы с индексами 1, 2 и 3.
text = "привет"
print(text[1:4]) # Выведет рив
Важно помнить, что в срез попадают символы от первого указанного индекса (включительно) до второго (не включая его).
  • Ситуация 2: опустим первый индекс при срезе, чтобы получить срез от самого начала до 4 индекса:
text = "привет"
print(text[:4]) # прив - срез от начала до 4
  • Ситауация 3: опустим второй индекс при срезе, чтобы получить срез от 3 индекса до самого конца:
text = "привет"
print(text[3:]) # вет - срез от 3 до конца
  • Ситуация 4: можно сделать срез всей строки целиком, не указывая границы:
text = "привет"
print(text[:]) # Выведет привет

Шаг извлечения среза

Шаг извлечения среза в Python — это необязательный параметр, который определяет интервал между элементами, которые будут выбраны при создании среза. Он позволяет выбирать каждый n-ный элемент из последовательности.

Например, если у нас есть список numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], то мы можем использовать шаг, чтобы извлечь только четные числа:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers = numbers[::2]
print(even_numbers) # Выведет [0, 2, 4, 6, 8]

Тонкости использования шага среза на примере работы со строками

При извлечении срезов из строки можно указывать шаг, с которым будут выбираться символы. Это позволяет получить не всю подстроку подряд, а каждый N-ый символ. Шаг указывается после двоеточия через второе двоеточие:

  • Прямой шаг: давайте сделаем срез всей строки текста с шагом 2. То есть возьмем символы с четными индексами:
text = "привет"
print(text[::2]) # Выведет пие

Указывая начальный, конечный индекс и шаг, можно гибко управлять результирующим срезом:

text = "привет"

print(text[1:6:2]) # рвт
# Здесь из строки взят срез с индекса 1 по 5 с шагом 2.
  • Отрицательный шаг: теперь извлечем срез в обратном порядке c шагом -1:
text = "привет"
print(text[::-1]) # тевирп

Результат эквивалентен развороту строки.

Софья Пирогова

Софья Пирогова

Главный редактор / Автор статей