Строки в Python: создание, индексы, срезы и работа с текстом
Этот урок переведён с английского оригинала.Read in EnglishLeer en españolСообщить об ошибке в переводе
Подумайте о своём телефоне. Почти всё, что вы видите на экране, состоит из текста: имена в контактах, сообщения от друзей, результаты поиска, уведомления. За кулисами весь этот текст хранится и обрабатывается в виде строк.
Строка позволяет Python хранить текст и работать с ним. Это может быть одна буква, целое предложение или даже целая книга. Если это текст, значит, это строка.
В этом уроке вы научитесь создавать строки, доставать из них отдельные символы, разрезать строки на части, склеивать их и проверять, что в них содержится. Эти навыки понадобятся вам почти в каждой программе на Python.
Что такое строки в Python?
Строка представляет собой последовательность символов, заключённую в кавычки. Можно использовать одинарные, двойные или тройные кавычки. Python считает строкой любой из этих вариантов.
Представьте строку как бусы. Каждая бусина соответствует одному символу, а кавычки работают как застёжка, которая скрепляет бусы.
Hello, world! Hello, world! Roses are red, Violets are blue, Python is awesome, And so are you.
Одинарные и двойные кавычки работают совершенно одинаково. Оба варианта существуют ради удобства: если в тексте есть кавычка одного типа, строку можно заключить в кавычки другого типа.
It's a beautiful day <div class="container">Hello</div>
Даже пустая пара кавычек создаёт строку. В пустой строке нет ни одного символа, но это всё равно полноценная строка.
<class 'str'> 0 1
Как получить отдельный символ строки?
У каждого символа строки есть номер позиции, который называется индексом. Чтобы получить любой символ, укажите его индекс в квадратных скобках.
Самое важное: Python начинает счёт с 0, а не с 1. Первый символ стоит под индексом 0, второй под индексом 1 и так далее. Это называется индексацией с нуля.
P y n
Представьте индексы строки как номера домов на улице, только первый дом имеет номер 0, а не 1. Поначалу это кажется странным, но вы быстро привыкнете.
Что такое отрицательные индексы в Python?
Python также позволяет считать с конца с помощью отрицательных индексов. Последний символ имеет индекс -1, предпоследний -2 и так далее.
n o P
Как работают срезы строк в Python?
Индекс достаёт один символ. Срез достаёт целый кусок строки. Это как отрезать ломоть из середины буханки хлеба.
Синтаксис такой: string[start:stop]. Срез берёт символы от start до stop (но не включая его). Правило «до, но не включая» относится к самым важным вещам, которые стоит запомнить.
Hello World H
Начало или конец среза можно не указывать. Без начала Python стартует с первого символа. Без конца он идёт до самого конца строки.
Hello World! Hello, World!
Как работает параметр step в срезах?
К срезу можно добавить третье число: string[start:stop:step]. Шаг (step) задаёт, как далеко прыгать от одного символа к следующему. Шаг 2 берёт каждый второй символ.
acegi adgj bdfh
Самое известное применение шага: разворот строки. Шаг -1 проходит по всей строке в обратном направлении.
nohtyP racecar
Как объединить строки в Python?
Конкатенация означает соединение строк. В Python для этого используется оператор +. Это как сцепить два кубика LEGO и получить деталь подлиннее.
Ada Lovelace Hello, world!
Повторение выполняется оператором *. Он повторяет строку заданное количество раз. Это неожиданно полезно, когда нужны разделители, узоры или выравнивание.
HaHaHa ------------------------------ abc abc abc abc My Report =========
Как узнать длину строки?
Функция len() сообщает, сколько символов в строке. Сюда входят буквы, цифры, пробелы и специальные символы. Считается каждый символ.
13 5 0 n
Как проверить, есть ли текст внутри строки?
Оператор in проверяет, входит ли одна строка в другую. Он возвращает True или False. Это похоже на поиск слова в документе через Ctrl+F.
True False True True
False True User said yes!
Что такое экранированные символы в строках Python?
Некоторые символы невозможно набрать прямо внутри строки. Как вставить в строку перенос строки? Или табуляцию? Для этого есть экранированные символы (escape-последовательности): особые сочетания, которые начинаются с обратной косой черты \.
Line 1 Line 2 Line 3 Name Age City Alice 25 Paris Bob 30 Tokyo File path: C:\Users\Documents She said "hello"
Вот краткая шпаргалка по экранированным символам, которые нужны чаще всего:
| Запись | Что делает | Пример вывода |
|---|---|---|
\n | Новая строка | Текст с новой строки |
\t | Табуляция | Добавляет отступ табуляцией |
\\ | Обратная косая черта | Выводит один \ |
\" | Двойная кавычка | Выводит " внутри строки в кавычках " |
\' | Одинарная кавычка | Выводит ' внутри строки в кавычках ' |
Почему нельзя изменить символ в строке Python?
Строки в Python неизменяемые. Это значит, что после создания строки нельзя изменить ни один её символ. Нельзя заменить букву или исправить опечатку внутри существующей строки.
Представьте строку как напечатанную книгу. Прочитать можно любую страницу, но стереть слово и написать вместо него другое нельзя. Если нужно что-то изменить, придётся напечатать новую книгу.
Error: 'str' object does not support item assignment
Как же тогда «изменить» строку? Нужно создать новую строку с нужными изменениями. Срезы и конкатенация отлично для этого подходят.
word = "Hello"
word[0] = "J" # TypeError!word = "Hello"
new_word = "J" + word[1:]
print(new_word) # JelloПрактические упражнения
Пора потренироваться! Эти упражнения охватывают всё, что было в уроке. Они начинаются с простого и постепенно усложняются.
Попробуйте решить каждое из них, прежде чем смотреть подсказки. Именно ошибки и чтение сообщений об ошибках помогают по-настоящему научиться.
Даны две переменные: first_name со значением "Ada" и last_name со значением "Lovelace". Создайте переменную greeting, которая объединяет их в сообщение, и выведите её.
Ожидаемый вывод:
Hello, Ada Lovelace! Welcome to Python.Соберите приветствие с помощью конкатенации строк (+).
Дана переменная word со значением "Programming". Выведите первый и последний символы на отдельных строках.
Ожидаемый вывод:
P
gПолучите каждый символ по его индексу.
Дана переменная text со значением "Python". Выведите эту строку задом наперёд.
Ожидаемый вывод:
nohtyPРазверните её одним срезом.
Не запуская код, предскажите, что выведет каждая строка. Помните: срез записывается как [start:stop], и stop в него не входит.
Запишите свои предположения в комментариях, а затем запустите код и проверьте себя.
Этот код пытается исправить опечатку, изменив символ напрямую. Но строки неизменяемые, поэтому программа завершается с ошибкой.
Исправьте код так, чтобы он выводил:
Hello WorldСоздайте новую строку вместо того, чтобы менять старую.
Даны переменные sentence и search_word. Проверьте без учёта регистра, встречается ли искомое слово в предложении, и выведите результат.
Ожидаемый вывод:
TrueПеред проверкой приведите обе строки к одному регистру.
Адрес электронной почты хранится в переменной email. Извлеките из него только доменное имя (часть после символа @) и выведите его.
Ожидаемый вывод:
gmail.comНайдите символ @ методом .find(), а затем срезом возьмите всё, что идёт после него.
Итоги: строки в Python
Краткая шпаргалка по всему, что вы узнали:
| Понятие | Синтаксис | Пример |
|---|---|---|
| Создание строки | "text" или 'text' | name = "Alice" |
| Индексация | string[i] | "Hello"[0] даёт "H" |
| Отрицательные индексы | string[-i] | "Hello"[-1] даёт "o" |
| Срез | string[start:stop] | "Hello"[1:4] даёт "ell" |
| Срез с шагом | string[::step] | "Hello"[::-1] даёт "olleH" |
| Конкатенация | + | "Hi" + " there" даёт "Hi there" |
| Повторение | * | "Ha" * 3 даёт "HaHaHa" |
| Длина | len(string) | len("Hello") даёт 5 |
| Проверка вхождения | in | "fox" in "a fox" даёт True |
| Экранированные символы | \n, \t, \\ | Специальные символы в строках |
Главное: строки неизменяемые. Символы можно читать, вырезать срезами, искать и объединять, но изменить строку на месте нельзя. Любое «изменение» создаёт совершенно новую строку.
Что дальше?
Теперь вы умеете создавать строки и делать срезы, и пора научиться их преобразовывать. В следующем уроке, [Методы строк в Python](/python/python-string-methods), вы познакомитесь со встроенными методами .upper(), .replace(), .split() и .strip(), с которыми работать с текстом становится намного приятнее.