Работая со строками, мы часто сталкиваемся с задачей: извлечь часть строки. Например, получить год из даты, имя из полного ФИО или первые несколько символов из адреса электронной почты. Для таких случаев в Python существует мощный и удобный инструмент — срезы (или slices).
Подстрока — это часть строки. То, что входит внутрь другой строки. Например, в строке '12-08-2034' подстрокой может быть '2034', '12' или даже '-'. Всё зависит от того, какую информацию нам нужно извлечь.
Допустим, у нас есть строка с датой '12-08-2034'. Мы хотим получить из неё только год — '2034'. В этой строке каждый символ имеет индекс (позицию), начиная с нуля:
'1' '2' '-' '0' '8' '-' '2' '0' '3' '4'
0 1 2 3 4 5 6 7 8 9
Получается, год начинается с индекса 6 и заканчивается на 9. Чтобы извлечь его, мы используем срез:
value = '12-08-2034'
year = value[6:10]
print(year) # => 2034
Срез value[6:10]
берёт символы с индекса 6 по 9 включительно. Формат среза:
строка[начало:конец]
Важно: символ с индексом, указанным как "конец", не включается.
value = '01-12-9873'
value[1:2] # => '1'
value[3:5] # => '12'
Срез всегда возвращает строку, даже если в ней только цифры. Это значит, что результат можно использовать, как обычную строку: конкатенировать, печатать, передавать в функции и так далее.
Иногда нужно взять часть строки до конца или от начала — такие ситуации тоже легко обрабатываются срезами:
value = 'Hexlet'
value[3:] # => 'let' # С 3 символа до конца
value[:3] # => 'Hex' # От начала до 3 символа
Если не указать границу, Python сам подставит нужное значение: начало строки или её конец.
Python позволяет считать не только слева направо, но и с конца строки. Для этого используются отрицательные индексы:
value = 'Hexlet'
value[-1] # => 't' # Последний символ
value[3:-1] # => 'le' # От 3 до предпоследнего
value[-5:3] # => 'ex' # С 1 до 3 включительно
Это удобно, когда заранее неизвестна длина строки, но нужно взять «хвост» или «середину» строки относительно конца.
У среза есть третий параметр — шаг. По умолчанию шаг равен 1, то есть символы идут подряд. Но шаг можно изменить, например, взять каждый второй символ:
value = 'Hexlet'
value[1:5:2] # => 'el'
# Индексы 1, 3 → символы 'e', 'l'
В этом примере:
Можно комбинировать с открытыми границами:
value[:5:2] # => 'Hxe'
value[1::2] # => 'elt'
Одна из самых популярных «фишек» с шагом — реверс строки. Для этого используют отрицательный шаг:
value = 'Hexlet'
value[::-1] # => 'telxeH'
Это полностью переворачивает строку — с конца к началу. Очень удобно и лаконично.
Если вы используете отрицательный шаг, помните: индексы тоже нужно указывать в обратном порядке. Иначе срез не сработает (возвратит пустую строку):
value = 'Hexlet'
value[4:1:-1] # => 'elx'
# Индексы: 4, 3, 2 → 'e', 'l', 'x'
Python начнёт с индекса 4 и пойдёт влево до индекса 2 включительно. Индекс 1 — не включается.
Срезы не обязаны быть жёстко зафиксированы числами. Можно использовать переменные:
start = 1
end = 5
value = 'Hexlet'
print(value[start:end]) # => 'exle'
Это особенно полезно, когда границы вычисляются во время работы программы.
value = 'Hexlet'
value[::] # 'Hexlet' — вся строка
value[:] # 'Hexlet'
value[::2] # 'Hxe' — чётные символы
value[1::2] # 'elt' — нечётные символы
value[::-1] # 'telxeH' — строка в обратном порядке
value[5:] # 't'
value[:5] # 'Hexle'
value[-2:1:-1] # 'elx' — с предпоследнего до третьего
Когда делаете срез от большего индекса к меньшему, не забудьте задать отрицательный шаг — иначе срез не сработает.
Не переживайте, если сейчас не запомните все комбинации — вы быстро начнёте использовать их на практике. Главное — понимать, как работает базовая структура строка[начало:конец:шаг]
.
В переменной value
лежит значение Hexlet
. Извлеките из него и выведите на экран срез, который получит подстроку xle
. Это задание можно сделать разными способами.
Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект
Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "ИИ-помощник". Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества
Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт
Ваше упражнение проверяется по этим тестам
1from hexlet.test import expect_output
2
3
4def test(capsys):
5 expected = "xle"
6 expect_output(capsys, expected)
7
Решение учителя откроется через: