На этом шаге мы рассмотрим основные операции над строками.
Как вы уже знаете, строки относятся к последовательностям. Как и все последовательности, строки поддерживают обращение к элементу по индексу, получение среза, конкатенацию, повторение и проверку на вхождение. Рассмотрим эти операции подробно.
К любому символу строки можно обратиться как к элементу списка - достаточно указать его индекс в квадратных скобках. Нумерация начинается с нуля:
>>> s = 'Python' >>> s[0], s[1], s[2], s[3], s[4], s[5] ('P', 'y', 't', 'h', 'o', 'n')
Если символ, соответствующий указанному индексу, отсутствует в строке, то возбуждается исключение IndexError:
>>> s = 'Python' >>> s[10] Traceback (most recent call last): File "<pyshell#4>", line 1, in <module> s[10] IndexError: string index out of range
В качестве индекса можно указать отрицательное значение. В этом случае смещение будет отсчитываться от конца строки, а точнее - чтобы получить положительный индекс, значение вычитается из длины строки:
>>> s[-1], s[len(s) - 1] ('n', 'n')
Так как строки относятся к неизменяемым типам данных, то изменить символ по индексу нельзя:
>>> s = 'Python' >>> s[0] = 'J' Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> s[0] = 'J' TypeError: 'str' object does not support item assignment
Чтобы выполнить изменение, можно воспользоваться операцией извлечения среза, которая возвращает указанный фрагмент строки. Формат операции:
[<Начало>:<Конец>:<Шаг>]
Все параметры здесь не являются обязательными. Если параметр <Начало> не указан, то используется значение 0. Если параметр <Конец> не указан, то возвращается фрагмент до конца строки. Следует также заметить, что символ с индексом, указанным в этом параметре, не входит в возвращаемый фрагмент. Если параметр <Шаг> не указан, то используется значение 1. В качестве значения параметров можно указать отрицательные значения.
Теперь рассмотрим несколько примеров. Сначала получим копию строки:
>>> s[:] # Фрагмент от позиции 0 до конца строки 'Python'
Теперь выведем символы в обратном порядке:
>>> s[::-1] # Отрицательное значение третьего параметра 'nohtyP'
Получим новую строку с другим первым символом:
>>> "J" + s[1:] # Извлекаем франмент от символа 1 до конца строки 'Jython'
Получим новую строку без последнего символа:
>>> s[:-1] # Возвращаем фрагмент от 0 до len(s) - 2 'Pytho'
Напечатаем первый символ в строке:
>>> s[0:1] # Символ с индексом 1 не входит в диапазон 'P'
А теперь получим последний символ:
>>> s[-1:] # Получаем фрагмент len(s) - 1 до конца строки 'n'
И, наконец, выведем символы с индексами 2, 3 и 4:
>>> s[2:5] # Возвращаются с символы с индексами 2, 3 и 4 'tho'
Узнать количество символов в строке позволяет функция len():
>>> len("Python"), len("\r\n\t"), len(r"\r\n\t") (6, 3, 6)
Теперь, когда мы знаем количество символов, можно перебрать все символы с помощью цикла for:
>>> s = "Python" >>> for i in range(len(s)): print(s[i], end=" ") P y t h o n
Так как строки поддерживают итерации, мы можем просто указать строку в качестве параметра цикла. Результат выполнения будет таким же:
>>> s = "Python" >>> for i in s: print(i, end=" ") P y t h o n
Соединить две строки в одну строку позволяет оператор +:
>>> print("Строка1" + "Строка2") Строка1Строка2
Кроме того, можно выполнить неявную конкатенацию строк. В этом случае две строки указываются рядом без оператора между ними:
>>> print("Строка1" "Строка2") Строка1Строка2
Обратите внимание на то, что если между строками указать запятую, то мы получим кортеж, а не строку:
>>> s = "Строка1", "Строка2" >>> type(s) # Получили кортеж, а не строку <class 'tuple'>
Если соединяются, например, переменная и строка, то следует обязательно указывать символ конкатенации строк, иначе будет выведено сообщение об ошибке:
>>> s = "Строка1" >>> print(s + "Строка2") # Нормально Строка1Строка2 >>> print(s "Строка2") # Ошибка SyntaxError: invalid syntax
При необходимости соединить строку с другим типом данных (например, с числом) следует произвести явное преобразование типов с помощью функции str ():
>>> "string" + str(10) 'string10'
Кроме рассмотренных операций, строки поддерживают операцию повторения, проверку на вхождение и невхождение. Повторить строку указанное количество раз можно с помощью оператора *, выполнить проверку на вхождение фрагмента в строку позволяет оператор in, а проверить на не вхождение - оператор not in:
>>> '-' * 20 '--------------------' >>> 'yt' in 'Python' # Найдено True >>> 'yt' in 'Perl' # Не найдено False >>> 'PHP' not in 'Python' # Не найдено True
На следующем шаге мы рассмотрим форматирование строк.