|
| 1 | +Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя и нужно вывести их в сокращённом формате — A. Ivanov. Для этого потребуется взять первую букву имени. |
1 | 2 |
|
2 |
| -Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя, и в какой-то момент требуется вывести эту информацию в формате *A. Ivanov*. Для этого компьютеру потребуется взять первый символ из имени. В Python есть подходящая операция, которую мы изучим сегодня. |
| 3 | +В Python для таких задач есть специальный механизм — индексация. |
3 | 4 |
|
4 |
| -Представим, что из имени Alexander нужно вывести на экран только первую букву. Это выглядит так: |
| 5 | +## 🔢 Индексация: как это работает |
5 | 6 |
|
6 |
| -```python |
| 7 | +Представим, что у нас есть строка: |
| 8 | + |
| 9 | +```Python |
7 | 10 | first_name = 'Alexander'
|
| 11 | +``` |
8 | 12 |
|
| 13 | +Чтобы получить первую букву, указываем её позицию (индекс) в квадратных скобках: |
| 14 | + |
| 15 | +```Python |
9 | 16 | print(first_name[0]) # => A
|
10 | 17 | ```
|
11 | 18 |
|
12 |
| -Операция с квадратными скобками с цифрой извлекает элемент по **индексу** — позицией символа внутри строки. Индексы начинаются с 0 почти во всех языках программирования. Поэтому, чтобы получить первый символ, нужно указать индекс `0`. Индекс последнего элемента равен длине строки минус единица. Обращение к индексу за пределами строки приведет к ошибке: |
| 19 | +Индексы в Python (и во многих языках) начинаются с нуля: |
13 | 20 |
|
14 |
| -```python |
15 |
| -# Длина строки 9, поэтому последний индекс — это 8 |
16 |
| -first_name = 'Alexander' |
| 21 | +``` |
| 22 | +Символ A l e x a n d e r |
| 23 | +Индекс 0 1 2 3 4 5 6 7 8 |
| 24 | +``` |
17 | 25 |
|
18 |
| -print(first_name[8]) # => r |
| 26 | +Чтобы получить, например, последний символ, можно написать: |
19 | 27 |
|
20 |
| -print(first_name[9]) |
21 |
| -IndexError: string index out of range |
| 28 | +```Python |
| 29 | +print(first_name[8]) # => r |
22 | 30 | ```
|
23 | 31 |
|
24 |
| -Чтобы лучше закрепить новые знания, посмотрите на код ниже и подумайте, что он выдаст: |
| 32 | +А если выйти за границы строки: |
25 | 33 |
|
26 |
| -```python |
27 |
| -magic = '\nyou' |
28 |
| -print(magic[1]) # => ? |
| 34 | +```Python |
| 35 | +print(first_name[9]) |
29 | 36 | ```
|
30 | 37 |
|
31 |
| -Бывают и нестандартные ситуации. Например, нужно вывести элемент из конца, причем из выражения с большим количеством символов. В этом случае можно воспользоваться отрицательным индексом, который облегчит работу программиста. |
| 38 | +IndexError: string index out of range |
32 | 39 |
|
33 |
| -Допустимо использовать отрицательные индексы. В этом случае идет обращение к символам, начиная с конца строки. `-1` — индекс последнего символа, `-2` — предпоследнего и так далее. В отличие от прямой индексации, обратный отсчет идет от `-1`: |
| 40 | +## 📍 Укороченное извлечение с конца |
34 | 41 |
|
35 |
| -```python |
36 |
| -first_name = 'Alexander' |
| 42 | +Часто нужно получить последний символ строки, но заранее неизвестна её длина. В этом случае можно использовать отрицательные индексы: |
37 | 43 |
|
| 44 | +```Python |
38 | 45 | print(first_name[-1]) # => r
|
| 46 | +print(first_name[-2]) # => e |
39 | 47 | ```
|
40 | 48 |
|
41 |
| -Индексом может быть не только конкретное число, но и значение переменной. Посмотрите на пример ниже. Здесь мы записали индекс внутри квадратных скобок не числом, а переменной. Такой код приведет к тому же результату — выводу на экран символа *A*: |
42 | 49 |
|
43 |
| -```python |
44 |
| -first_name = 'Alexander' |
45 |
| -index = 0 |
| 50 | +Отрицательные индексы работают так: |
| 51 | + |
| 52 | +- -1 — последний символ |
| 53 | +- -2 — предпоследний |
| 54 | +- и так далее |
| 55 | + |
| 56 | +Это удобно, когда не хочется считать длину строки вручную. |
| 57 | + |
| 58 | +🧠 Индекс — это не только число |
46 | 59 |
|
| 60 | +Индекс можно хранить в переменной, а не записывать прямо: |
| 61 | + |
| 62 | +```Python |
| 63 | +index = 0 |
47 | 64 | print(first_name[index]) # => A
|
48 | 65 | ```
|
49 | 66 |
|
50 |
| -https://replit.com/@hexlet/python-basics-advanced-strings-symbols |
| 67 | +Такой подход полезен, когда индекс вычисляется где-то в коде, а потом используется для доступа к нужному символу. |
| 68 | + |
| 69 | +## 💡 Подумайте: что выведет этот код? |
| 70 | + |
| 71 | +```Python |
| 72 | +magic = '\nyou' |
| 73 | +print(magic[1]) # => ? |
| 74 | +``` |
| 75 | + |
| 76 | +В строке '\nyou' первый символ — это \n (перенос строки), а под индексом 1 — буква y. |
| 77 | +Вывод будет: |
| 78 | + |
| 79 | +``` |
| 80 | +y |
| 81 | +``` |
| 82 | + |
| 83 | +🔁 Закрепим |
51 | 84 |
|
52 |
| -Чтобы выводить из выражения лишь некоторые символы, не нужно писать большое количество строк кода — достаточно извлечь элемент с помощью индекса. Также можно пользоваться отрицательным индексом, чтобы легче выводить символы с конца выражения. Далее разберемся, как с помощью этих знаний можно извлекать подстроки из строки. |
| 85 | +- Строки можно индексировать — получать символы по номеру. |
| 86 | +- Отсчёт с начала идёт с 0, с конца — с -1. |
| 87 | +- Можно использовать как числа, так и переменные в качестве индексов. |
| 88 | +- Если индекс выходит за пределы строки — будет ошибка. |
0 commit comments