- 🔢 Индексация: как это работает
- 📍 Укороченное извлечение с конца
- 🌀 Спецсимволы
- Подумайте: что выведет этот код?
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращённом формате — A. Ivanov. Для этого потребуется взять первую букву имени.
В Python для таких задач есть специальный механизм — индексация.
🔢 Индексация: как это работает
Представим, что у нас есть строка:
first_name = 'Alexander'
Чтобы получить первую букву, указываем её позицию (индекс) в квадратных скобках:
print(first_name[0]) # => A
Индексы в Python (и во многих языках) начинаются с нуля:
Символ A l e x a n d e r
Индекс 0 1 2 3 4 5 6 7 8
Чтобы получить, например, последний символ, можно написать:
print(first_name[8]) # => r
Если изменится длина строки, то последний элемент тоже сдвинется и придется указывать новый индекс по которому расположен этот символ.
А если выйти за границы строки, то мы получим ошибку:
print(first_name[9])
IndexError: string index out of range
Поэтому в программировании принято проверять длину строки и обращаться к ее символами только если это безопасно. Мы до этого дойдем в будущих уроках.
📍 Укороченное извлечение с конца
Часто нужно получить последний символ строки, но заранее неизвестна её длина. В этом случае можно использовать отрицательные индексы:
print(first_name[-1]) # => r
print(first_name[-2]) # => e
Отрицательные индексы работают так:
- -1 — последний символ
- -2 — предпоследний
- и так далее
Это не только удобно, но и безопасно, потому что работает правильно даже если строка меняет свою длину.
Индекс — это не только число. Индекс можно хранить в переменной, а не записывать прямо:
index = 0
print(first_name[index]) # => A
Такой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу.
🌀 Спецсимволы
При индексации учитываются не только обычные буквы и знаки, но и спецсимволы. Они тоже занимают позицию в строке, у них есть свой индекс, даже если их «не видно» на экране.
Например, в строке \nyou
первый символ — это \n
(перенос строки), а под индексом 1 уже идёт буква y
. Поэтому обращение magic[1]
вернёт именно y
.
Подумайте: что выведет этот код?
magic = '\nyou'
print(magic[1]) # => ?
В строке '\nyou' первый символ — это \n (перенос строки), а под индексом 1 — буква y. Вывод будет:
y