Індексація
Оскільки 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
.