Работая со строками в программировании, регулярно приходится извлекать подстроки из строки. Подстрокой называется какая-то часть строки. Представим, что у нас есть дата в таком формате: 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'
Как видите, срезы способны на многое. Не переживайте, что прямо сейчас вы не запомните все эти комбинации, это нормально. Со временем вы научитесь их использовать без подглядывания в документацию.
Вам ответят команда поддержки Хекслета или другие студенты.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт