Перейти до змісту

Індексація

Оскільки string — це впорядкована послідовність символів, то до окремих символів можна дістатись по його порядковому номеру, або по його індексу.

У програмуванні індексація майже завжди починається з 0. Тобто перший по порядку символ буде мати індекс 0, другий — індекс 1 і так далі.

Щоб звернутись до окремого символа по його індексу вказують символьний рядок і одразу ж у квадратних дужках індекс символа:

>>> 'hello'[0]
'h'
>>> s = '12345'
>>> s[4]
'5'
>>>

Виходити за межі string не можна:

>>> s[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>

Помилку можна трактувати так:

Помилка Індексації: індекс символьного рядка поза межами

Якщо вказувати від'ємні індекси, то відлік буде вестись не з початку string, а з його кінця. Останній по порядку символ має індекс -1:

>>> s[-1]
'5'
>>> s[-5]
'1'
>>> s[-6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>

Зрізання (slice)

Ми можемо звернутись до групи елементів послідовності які йдуть один за одним за допомогою зрізань. Щоб зробити зрізання послідовності треба вказати у квадратних дужках індекс першого і останього елемента.

[start:end]

start — це початковий індекс. Зрізання починається з елемента з цим індексом.
end — це індекс елемента який йде за останнім елементом зрізання.
Тобто можна сказати що індекс початку включається в зрізання, а кінцевий вже ні.
Не забуваємо що індекси починаються з нуля.

Розглянемо на прикладі:

>>> s = '0123456789'
>>> s[0:5] # перші 5 елементів
'01234'
>>> s[5:10] # останні 5 елементів
'56789'

Також можна вказувати від'ємні індекси:

>>> s[1:-1] # без першого і останього елементів
'12345678'
>>>

Якщо зрізання починається з початку послідовності, тобто перший індекс буде 0, то перший індекс можна не вказувати:

>>> s[:4]  # перші 4 елементи (з початку і по елемент з індексом 3 включно)
'0123'
>>>

Аналогічно можна не вказувати кінцевий індекс якщо мається на увазі що зрізання продовжується до кінця рядка:

>>> s[6:]  # останні 4 елемента послідовності
'6789'
>>> s[-4:]  # те ж саме, але більш зрозуміло
'6789'
>>>

Якщо у зрізанні не вказувати обидва індекси (початковий і кінцевий), то отримаємо символьний рядок повністю, від початку і до кінця:

>>> s[:]
'0123456789'
>>>

Крім початкового і кінцевого індексів для зрізань можна вказати ще й крок з яким буде братись зрізання.
Наприклад нам потрібен кожен другий символ починаючи з другого по порядку і до кінця:

>>> s[1::2]  # починаючи з індекса 1 до кінця кожен другий елемент
'13579'
>>>

А як щодо взяти кожен третій символ починаючи з першого?

>>> s[::3]
'0369'
>>>

Також можна "крокувати" у зворотньому напрямку, достатньо вказати від'ємний крок:

>>> s[::-1]  # як швидко "розвернути" символьний рядок
'9876543210'
>>>

Зауважте що індексація і зрізання, які ми застосовуємо до типу даних str — це вираз, який повертає значення також типу str.