Строка — это последовательность

Строка — это последовательность символов. Вы можете получить доступ к любому символу, используя квадратные скобки:

a = 'банан'
b = a[1]
print(f"{b}")

Вторая инструкция выбирает символ под номером \(1\) из значения переменной a и присваивает его переменной b.

 

Выражение в квадратных скобках называется индексом (index). Индекс указывает, какой символ в последовательности вы хотите вернуть (отсюда и название индекс = указатель).

 

Но результат вас удивит:

a

Для большинства людей первая буква в слове «банан» — это б, а не а. Но программисты знают, что индекс является смещением от начала строки, а смещение первой буквы равно нулю.

a = 'банан'
b = a[0]
print(f"{b}")
б

Базовые операции

Конкатенация (сложение) строк

s1 = 'spam'
s2 = 'eggs'
s3 = s1 + s2
print(f"{s3}")
spameggs

Дублирование строки

s1 = 'spam'
s2 = s1 * 3
print(f"{s2}")
spamspamspam

Длина строки

Встроенная функция len() возвращает количество символов в строке:

s = 'Python'
l = len(s)
print(f"{l}")
6

Чтобы получить последнюю букву строки, вы, возможно, захотите попробовать что-то вроде этого:

s = 'Python'
l = len(s)
ch = s[l]
IndexError: string index out of range

Причина ошибки IndexError в том, что в слове Python нет буквы с индексом \(6\). Поскольку мы начали считать с нуля, то шесть букв пронумерованы от \(0\) до \(5\). Чтобы получить последний символ, вы должны вычесть \(1\) из значения переменной length:

s = 'Python'
l = len(s)
x = s[l - 1]
n

Так же вы можете использовать отрицательные индексы, отсчет начинается с конца строки. Выражение s[-1] возвращает последнюю букву, s[-2] — вторую с конца и так далее.

0 1 2 3 4 5
P y t h o n
-6 -5 -4 -3 -2 -1

Срезы строк

Сегмент строки называется срезом (slice). Выбор среза аналогичен выбору символа:

s = 'Монти Пайтон'
s1 = s[0:5]
s2 = s[6:12]
print(f"{s1}")
print(f"{s2}")
Монти
Пайтон

Инструкция [n:m] возвращает часть строки начиная с \(n\)-го символа и заканчивая \(m\)-ным, первый включается в результат, а последний — нет.

 

Если вы опустите первый индекс (перед двоеточием), срез начнется с начала строки. Если вы опустите второй индекс, срез продолжится до конца строки:

s = 'Монти Пайтон'
s1 = s[:5]
s2 = s[6:]
print(f"{s1}")
print(f"{s2}")
Монти
Пайтон

Если первый индекс больше или равен второму, результатом будет пустая строка, окруженная двумя кавычками:

a = 'apple'
b = a[3:3]
print(f"{b}")
''

Пустая строка не содержит символов и имеет длину \(0\), но в остальном это такая же строка, как и любая другая.

Шаг в срезах

Срезы поддерживают третий аргумент — шаг. Если его не указывать, по умолчанию значение шага равно \(1\).

 

Например, срез \([3:20:5]\) означает выборку значений с индексами \(3\), \(8\)\(13\) и \(18\).

 

Вот несколько примеров с разными наборами параметров:

● [:] или [::] — вся строка

● [:3] — первые три символа строки

● [3:] — строка без первых трёх символов

● [-3:] — последние три символа строки

● [:-3] — строка без последних трёх символов

● [::2] — нечетные по порядку символы

● [1::2] — четные по порядку символы

● [::-1] — все символы в обратном порядке

● [-2:1:-1] — все символы от предпоследнего до третьего в обратном порядке. Во всех случаях выборки от большего индекса к меньшему нужно указывать шаг.

Пример 1

Найдите предпоследний символ строки \(s\).

s = input()
x = s[-2]
print(f"{x}")
Python
o

Пример 2

Удалите пятый символ строки \(s\).

s = input()
a = s[:4] + s[5:]
print(f"{a}")
abcdefg
abcdfg

Практические задания