Строка — это последовательность
Строка — это последовательность символов. Вы можете получить доступ к любому символу, используя квадратные скобки:
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