
Работа со строками
Интерполяция. Извлечение символов из строки. Срез строки
Штана Альберт Игоревич
Работа со строками в Python
Вы уже знаете, как перенести строку или соединить несколько строк в одну. Но в программировании есть ещё операции со строками которые повышают читаемость кода и делают решения многих задач проще.
Интерполяция
Базовый способ соединения строк — конкатенация. С помощью конкатенации строки «суммируются» друг с другом, как в примере ниже:
first_name = 'Jack'
last_name = 'London'
print(first_name + " " + last_name + "!")
# => Jack London!
Конкатенация работает просто, но выглядит не всегда наглядно. Из-за кавычек сложно разглядеть то, каким будет конечный результат. И чем сложнее устроена строка, тем запутаннее она начнет выглядеть. У конкатенации есть альтернатива — интерполяция. Вот как это выглядит:
first_name = 'Jack'
last_name = 'London'
print(f'{first_name} {last_name}!')
# => Jack London!
Буква f указывает на то, что мы создаем f-строку — шаблон, в который с помощью фигурных скобок подставляются значения переменных. На выходе получается обычная строка. Рассмотрим такой пример:
lesson = 'Информатика'
best_subject = f'{lesson} - лучший предмет!'
print(best_subject) # => Информатика - лучший предмет!
Почти во всех языках для объединения строк интерполяция предпочтительнее конкатенации. Строка при этом получается склеенная, и внутри нее хорошо просматриваются пробелы и другие символы. Интерполяция помогает сделать код более понятным для разработчиков. Но это не единственная полезная альтернатива. Далее разберемся, как объявлять многострочную строку и не использовать символ новой строки \n.
Multi-line строки
Представьте, что нужно определить строку, которая состоит из нескольких строчек — то есть внутри есть переводы строки \n. Например, она будет выглядеть так:
text = 'Пример текста,\nсостоящего из\nнескольких строк'
На печати строка примет совсем другой вид:
Пример текста,
состоящего из
нескольких строк
Для таких ситуаций в Python есть еще один способ создания строк, который называется multi-line строки. Чтобы описать такую «многострочную строку», нужно заключить ее в тройные кавычки — """ или '''. Внутри multi-line строки можно переносить текст и не использовать перевод строки \n:
text = '''Пример текста,
состоящего из
нескольких строк'''
Пример текста,
состоящего из
нескольких строк
Благодаря тройным кавычкам multi-line строки позволяют не экранировать кавычки внутри строки. Еще multi-line строки могут становиться f-строками для интерполяции:
a = 'A'
b = 'B'
text = f'''{a} и {b}
сидели на трубе
'''
А и B
сидели на трубе
Для компьютера не важно, какие способы соединения и переноса строк вы будете использовать. Интерполяция и multi-line строки используются для удобства разработчиков, чтобы им было проще читать код.
Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя, и в какой-то момент требуется вывести эту информацию в формате И. Иванов. Для этого компьютеру потребуется взять первый символ из имени. В Python есть подходящая операция.
Извлечение элемента по индексу
Представим, что из имени Иван нужно вывести на экран только первую букву. Это выглядит так:
name = 'Иван'
print(name[0]) # => И
Операция с квадратными скобками с цифрой извлекает элемент по индексу — позиции символа внутри строки. Индексы начинаются с 0 почти во всех языках программирования. Поэтому, чтобы получить первый символ, нужно указать индекс 0. Индекс последнего элемента равен длине строки минус единица. Обращение к индексу за пределами строки приведет к ошибке:
# Длина строки 9, поэтому последний индекс — это 8
first_name = 'Александр'
print(first_name[8]) # => р
print(first_name[9]) # => IndexError: string index out of range
Чтобы лучше закрепить новые знания, посмотрите на код ниже и подумайте, что он выдаст:
x = '\nyou'
print(x[1])
Бывают и нестандартные ситуации. Например, нужно вывести элемент с конца, причем из выражения с большим количеством символов. В этом случае можно воспользоваться отрицательным индексом, который облегчит работу программиста.
Отрицательные индексы
Допустимо использовать отрицательные индексы. В этом случае идет обращение к символам, начиная с конца строки. -1 — индекс последнего символа, -2 — предпоследнего и так далее. В отличие от прямой индексации, обратный отсчет идет от -1:
name = 'Александр'
print(name[-1]) # => р
Индексом может быть не только конкретное число, но и значение переменной. Посмотрите на пример ниже. Здесь записали индекс внутри квадратных скобок не числом, а переменной. Такой код приведет к тому же результату — выводу на экран символа А:
name = 'Александр'
i = 0
print(name[i]) # => А
Чтобы выводить из выражения лишь некоторые символы, не нужно писать большое количество строк кода — достаточно извлечь элемент с помощью индекса. Также можно пользоваться отрицательным индексом, чтобы легче выводить символы с конца выражения. Далее разберемся, как с помощью этих знаний можно извлекать подстроки из строки.
Срезы строк
Когда идёт работа со строками в программировании, из них регулярно приходится извлекать некую часть. Например, нам нужно выяснить, присутствует ли меньшая строка внутри большей.
Подстрока и срезы для строк
Подстрока — это некоторая часть строки, которую нужно найти и извлечь. Представим, что у нас есть дата в таком формате: 24-01-2025. Нам нужно извлечь из нее подстроку, в которую входит только год. Если подумать логически, то нужно посчитать индекс символа, с которого начинается год, и затем извлечь четыре символа. Индексы в строке начинаются с нуля, значит, первый символ года доступен по индексу 6, а последний символ — по индексу 9. Проверим:
data = '12-08-2025'
print(data[6]) # => 2
print(data[9]) # => 5
Зная эти индексы, можно воспользоваться срезами и получить нужную подстроку:
data = '12-08-2025'
year = data[6:10]
print(year) # => 2025
Срезы для строк в Python — это механизм, с помощью которого извлекается подстрока по указанным параметрам. В примере выше создаётся подстрока с 6 индекса до 10 индекса, не включая, то есть с 6 по 9. Формула выглядит так:[начальный индекс:конечный индекс]. Примеры:
data = '24-01-2025'
data[1:2] # '4'
data[3:5] # '01'
Срезы — механизм с большим количеством вариаций. Например, если не указать вторую границу, то извлечение произойдет до конца строки. То же самое с первой границей — началом строки:
value = 'Python'
value[3:] # 'hon'
value[:3] # 'Pyt'
Можно указать даже отрицательные индексы. В таком случае отсчет идет с обратной стороны:
value = 'Python'
# Правая граница отрицательная. Считаем -1 от конца строки
value[3:-1] # 'ho'
# Левая граница отрицательная. Считаем -5 от конца строки
value[-5:3] # 'yt'
У срезов два обязательных параметра, но иногда используется и третий.
Шаг извлечения
У срезов есть третий необязательный параметр — шаг извлечения. По умолчанию он равен единице, но можно его изменить:
data = 'Python'
data[1:5:2] # => yh
Все это можно комбинировать с открытыми границами, то есть без указания начала или конца:
value = 'Python'
value[:5:2] # 'Pto' символы берутся от начала до 5 индекса через один
value[1::2] # 'yhn' символы берутся от 1 индекса до конца через один
Шаг может быть отрицательным, в таком случае он берется с конца. На этом основан самый популярный способ использования шага — переворот строки:
value = 'Python'
value[::-1] # 'nohtyP'
Если используется отрицательный шаг, и элементы среза извлекаются в обратном порядке, тогда и границы среза тоже нужно указывать в обратном порядке. Первой указывается правая граница среза, второй — левая:
value = 'Python'
value[4:1:-1] # 'oht'
Срезы можно указывать не только через числа, но и с использованием переменных:
value = 'Python'
begin = 1
end = 5
value[begin:end] # 'ytho'
Всё вместе:
value = 'Python'
value[::] # 'Python' # Вся строка
value[:] # 'Python' # Вся строка
value[::2] # 'Pto' # Нечетные по порядку символы
value[1::2] # 'yhn' # Четные по порядку символы
value[::-1] # 'nohtyP' # Вся строка в обратном порядке
value[5:] # 'n' # Строка, начиная с шестого символа
value[:5] # 'Pytho' # Строка до шестого символа
value[-2:1:-1] # 'oht' # Все символы с предпоследнего до третьего в обратном порядке
Во всех случаях выборки от большего индекса к меньшему нужно указывать шаг.
Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает. Для этого в ячейке с кодом нажмите клавиши на клавиатуре Shift+Enter или запустите код через кнопку Run по значку ▶.