Добавить в корзинуПозвонить
Найти в Дзене
Мамкин сисадмин

Серия уроков Python #6. Срезы строк

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

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

Подстрока и срезы для строк

Подстрока — это некоторая часть строки, которую нужно найти и извлечь.

Представим, что у нас есть дата в таком формате: 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 = 'dzen'

print(value[1:]) # => zen
print(value[:2]) # => dz

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

value = 'dzen chanale'
# Правая граница отрицательная. Считаем -1 от конца строки
print(value[5:-1]) # 'chanal'
# Левая граница отрицательная. Считаем -10 от конца строки
print(value[-10:10]) # 'en chana'

У срезов два обязательных параметра, но иногда используется и третий.

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

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

value = 'dzen chanale'
print(value[1:12:2]) # => 'zncaae'
# 1:11 это '
zen chanale'
# шаг 2 значит через один, то есть 'z' , 'n', 'c', 'a', 'a', 'e'

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

value = 'dzen'
print(value[:3:2]) # 'de' символы берутся от начала до 3 индекса через один
print(value[1::2] ) # 'zn' символы берутся от 1 индекса до конца через один

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

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

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

value = 'dzen'
# Символ с индексом 1 не будет включен в подстроку
print(value[3:1:-1]) # 'ne'

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

value = 'Dzen!'
begin = 1
end = 4
print(value[begin:end]) # 'zen'

Соберем все вместе:

value = 'Chanel'
print(value[::]) # => 'Chanel' # Вся строка
print(value[:]) # => 'Chanel' # Вся строка
print(value[::2]) # => 'Cae' # Нечетные по порядку символы
print(value[1::2]) # => 'hnl' # Четные по порядку символы
print(value[::-1]) # => 'lenahC' # Вся строка в обратном порядке
print(value[5:]) # => 'l' # Строка, начиная с шестого символа
print(value[:5]) # => 'Chane' # Строка до шестого символа
print(value[-2:1:-1]) # => 'ena' # Все символы с предпоследнего до третьего в обратном порядке. Во всех случаях выборки от большего индекса к меньшему нужно указывать шаг

Спасибо, что дочитали до конца. Вы меня очень поддержите, если поставите "Лайк", оставите комментарий или ПОДПИШИТЕСЬ на мой канал :)