Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Срезы строк Основы языка Python

Работая со строками в программировании, регулярно приходится извлекать подстроки из строки. Подстрокой называется какая-то часть строки. Представим, что у нас есть дата в таком формате: 12-08-2034. Как извлечь из этой строки подстроку, в которую входит только год?

Если подумать логически, то для извлечения года, нам нужно посчитать индекс символа с которого начинается год и затем извлечь четыре символа. Индексы в строке начинаются с нуля, а значит первый символ года доступен по индексу 6, а последний символ находится по индексу 9. Проверим:

value = '12-08-2034'

print(value[6])  # => 2
print(value[9])  # => 4

Теперь, зная эти индексы, мы можем воспользоваться срезами для получения нужной подстроки:

value = '12-08-2034'

year = value[6:10]
print(year)  # => 2034

Срезы для строк в Python - это механизм, с помощью которого извлекается подстрока по указанным параметрам. В примере выше мы взяли подстроку начиная с 6 индекса по 10 индекс не включая, то есть с 6 по 9 включительно. Формула выглядит так:

str[начальный индекс:конечный индекс]

# Пара примеров
value = '01-12-9873'

# Срез строки это всегда строка,
# даже если внутри строки было число.
value[1:2]  # '1'
value[3:5]  # '12'

Срезы - очень мощный механизм с большим количеством вариаций, например, если не указать вторую границу, то извлечение произойдет до конца строки, то же самое с первой границей (началом строки):

value = 'Hexlet'
value[3:]  # 'let'
value[:3]  # 'Hex'

Мы можем указать даже отрицательные индексы. В таком случае отсчет идет с обратной стороны:

value = 'Hexlet'
# Правая граница отрицательная. Считаем -1 от конца строки
value[3:-1]  # 'le'
# Левая граница отрицательная. Считаем -5 от конца строки
value[-5:3]  # 'ex'

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

value = 'Hexlet'
value[1:5:2]  # el
# 1:5 это 'exle'
# шаг 2 это каждый второй, то есть 'e' и 'l'

Все это можно комбинировать с открытыми границами, то есть без указания начала или конца:

value = 'Hexlet'
value[:5:2]  # 'Hxe'
value[1::2]  # 'elt'

Шаг может быть отрицательным, в таком случае он берется с конца. Из этого вытекает самый популярный способ использования шага - переворот строки:

value = 'Hexlet'
# Пропускаем обе границы
value[::-1]  # 'telxeH'

Если используется отрицательный шаг и элементы среза извлекаются в обратном порядке, то и границы среза тоже нужно указывать в обратном порядке. Первой указывается правая граница среза, второй – левая:

value = 'Hexlet'
# Символ с индексом 1 не будет включён в подстроку
value[4:1:-1]  # 'elx'

Срезы можно указывать не только через числа, но и с использованием переменных:

value = 'Hexlet'
start = 1
end = 5
value[start:end]  # 'exle'

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


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
7 июля 10 месяцев

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»