Строки. Функции и методы строк
Итак, о работе со строками мы немного поговорили, теперь поговорим о функциях и методах строк.
Я постарался собрать здесь все строковые методы и функции, но если я что-то забыл — поправляйте.
Базовые операции
При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.
: Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.
Таблица «Функции и методы строк»
Функция или метод | Назначение |
---|---|
S = ‘str’; S = «str»; S = »’str»’; S = «»»str»»» | Литералы строк |
S = «s\np\ta\nbbb» | Экранированные последовательности |
S = r»C:\temp\new» | Неформатированные строки (подавляют экранирование) |
S = b»byte» | Строка байтов |
S1 + S2 | Конкатенация (сложение строк) |
S1 * 3 | Повторение строки |
S[i] | Обращение по индексу |
S[i:j:step] | Извлечение среза |
len(S) | Длина строки |
S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
S.rfind(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или -1 |
S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или вызывает ValueError |
S.rindex(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер последнего вхождения или вызывает ValueError |
S.replace(шаблон, замена[, maxcount]) | Замена шаблона на замену. maxcount ограничивает количество замен |
S.split(символ) | Разбиение строки по разделителю |
S.isdigit() | Состоит ли строка из цифр |
S.isalpha() | Состоит ли строка из букв |
S.isalnum() | Состоит ли строка из цифр или букв |
S.islower() | Состоит ли строка из символов в нижнем регистре |
S.isupper() | Состоит ли строка из символов в верхнем регистре |
S.isspace() | Состоит ли строка из неотображаемых символов (пробел, символ перевода страницы (‘\f’), «новая строка» (‘\n’), «перевод каретки» (‘\r’), «горизонтальная табуляция» (‘\t’) и «вертикальная табуляция» (‘\v’)) |
S.istitle() | Начинаются ли слова в строке с заглавной буквы |
S.upper() | Преобразование строки к верхнему регистру |
S.lower() | Преобразование строки к нижнему регистру |
S.startswith(str) | Начинается ли строка S с шаблона str |
S.endswith(str) | Заканчивается ли строка S шаблоном str |
S.join(список) | Сборка строки из списка с разделителем S |
ord(символ) | Символ в его код ASCII |
chr(число) | Код ASCII в символ |
S.capitalize() | Переводит первый символ строки в верхний регистр, а все остальные в нижний |
S.center(width, [fill]) | Возвращает отцентрованную строку, по краям которой стоит символ fill (пробел по умолчанию) |
S.count(str, [start],[end]) | Возвращает количество непересекающихся вхождений подстроки в диапазоне [начало, конец] (0 и длина строки по умолчанию) |
S.expandtabs([tabsize]) | Возвращает копию строки, в которой все символы табуляции заменяются одним или несколькими пробелами, в зависимости от текущего столбца. Если TabSize не указан, размер табуляции полагается равным 8 пробелам |
S.lstrip([chars]) | Удаление пробельных символов в начале строки |
S.rstrip([chars]) | Удаление пробельных символов в конце строки |
S.strip([chars]) | Удаление пробельных символов в начале и в конце строки |
S.partition(шаблон) | Возвращает кортеж, содержащий часть перед первым шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий саму строку, а затем две пустых строки |
S.rpartition(sep) | Возвращает кортеж, содержащий часть перед последним шаблоном, сам шаблон, и часть после шаблона. Если шаблон не найден, возвращается кортеж, содержащий две пустых строки, а затем саму строку |
S.swapcase() | Переводит символы нижнего регистра в верхний, а верхнего – в нижний |
S.title() | Первую букву каждого слова переводит в верхний регистр, а все остальные в нижний |
S.zfill(width) | Делает длину строки не меньшей width, по необходимости заполняя первые символы нулями |
S.ljust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя последние символы символом fillchar |
S.rjust(width, fillchar=» «) | Делает длину строки не меньшей width, по необходимости заполняя первые символы символом fillchar |
S.format(*args, **kwargs) | Форматирование строки |
Для вставки кода на Python в комментарий заключайте его в теги
Основные методы строк
На этом занятии мы познакомимся с основными методами для строк. Что такое методы? Смотрите, когда мы объявляем какую-либо строку:
то в памяти устройства автоматически создается объект, содержащий указанные символы. Тип данных этого объекта – строка:
Так вот, каждый такой объект связан с набором стандартных функций по работе со строками. Эти функции и называются методами.
Чтобы вызвать метод для конкретной строки, необходимо указать объект, поставить точку, записать имя метода и в круглых скобках список аргументов, если они необходимы:
Давайте рассмотрим все на конкретных примерах. Итак, у нас есть объект-строка, на который ссылается переменная s. Через эту переменную можно вызывать все методы строк. Чтобы увидеть их полный список, можно записать:
и Pycharm отобразит полный их список. Мы с вами сейчас увидим работу наиболее употребительных из них. Первый метод:
возвращает новую строку (новый объект) со всеми заглавными буквами. При этом сама строка остается без изменений. И это логично, так как строки относятся к неизменяемым типам данных.
Обратите внимание, для вызова этого метода после его имени обязательно нужно поставить круглые скобки. Без них мы получим просто ссылку на объект-функцию:
но запущена она не будет. Для запуска необходимы круглые скобки в конце – это оператор для выполнения функций и методов.
Если мы хотим сохранить результат преобразования строки в какой-либо переменной, то это делается так:
И теперь res ссылается на строку 'PYTHON'.
наоборот, переводит все буквенные символы в нижний регистр и возвращает соответствующую строку.
получим значение 2 – именно столько данная подстрока встречается в нашей строке. Теперь предположим, что мы хотим начинать поиск с буквы k, имеющей индекс 4. Тогда метод следует записать со значением start=4:
и мы получим значение 1. Далее, укажем третий аргумент – индекс, до которого будет осуществляться поиск. Предположим, что мы хотим дойти до 10-го индекса и записываем:
и получаем значение 0. Почему? Ведь на индексах 9 и 10 как раз идет подстрока «ra»? Но здесь, также как и в срезах, последний индекс исключается из рассмотрения. То есть, мы говорим, что нужно дойти до 10-го, не включая его. А вот если запишем 11:
то последнее включение найдется. Следующий метод String.find(sub[, start[, end]]) возвращает индекс первого найденного вхождения подстроки sub в строке String. А аргументы start и end работают также как и в методе count. Например:
возвращает 1, т.к. первое вхождение «br» как раз начинается с индекса 1. Поставим теперь значение start=2:
и поиск начнется уже со второго индекса. Получим значение 8 – индекс следующего вхождения подстроки «br». Если мы укажем подстроку, которой нет в нашей строке:
то метод find возвращает -1. Третий аргумент end определяет индекс, до которого осуществляется поиск и работает также как и в методе count. Метод find ищет первое вхождение слева-направо. Если требуется делать поиск в обратном направлении: справа-налево, то для этого используется метод String.rfind(sub[, start[, end]]) который во всем остальном работает аналогично find. Например:
возвратит 8 – первое вхождение справа. Наконец, третий метод, аналогичный find – это: String.index(sub[, start[, end]]) Он работает абсолютно также как find, но с одним отличием: если указанная подстрока sub не находится в строке String, то метод приводит к ошибке:
тогда как find возвращает -1. Спрашивается: зачем нужен такой ущербный метод index? В действительности такие ошибки можно обрабатывать как исключения и это бывает полезно для сохранения архитектуры программы, когда неожиданные ситуации обрабатываются единым образом в блоке исключений. Но, обо всем этом речь пойдет позже. Следующий метод String.replace(old, new, count=-1) Выполняет замену подстрок old на строку new и возвращает измененную строку. Например, в нашей строке, мы можем заменить все буквы a на o:
Заменит только первые две буквы a: «msg.replace("a", 'o', 2)». При значении -1 количество замен неограниченно. Следующие методы позволяют определить, из каких символов состоит наша строка. Например, метод String.isalpha() возвращает True, если строка целиком состоит из букв и False в противном случае. Посмотрим, как он работает:
мы получим False, т.к. имеется символ пробела. Похожий метод String.isdigit() возвращает True, если строка целиком состоит из цифр и False в противном случае. Например:
получим значение True. Такая проверка полезна, например, перед преобразованием строки в целое число. О проверках мы еще будем говорить. Следующий метод String.rjust(width[, fillchar = ‘ ‘]) возвращает новую строку с заданным числом символов width и при необходимости слева добавляет символы fillchar:
Получаем строку « abc» с двумя добавленными слева пробелами. А сама исходная строка как бы прижимается к правому краю. Этот метод часто используют для добавления незначащих нулей перед цифрами:
Получим строку «012». Причем вторым аргументом можно писать только один символ. Если записать несколько, то возникнет ошибка:
то вернется исходная строка. Аналогично работает метод String.ljust(width[, fillchar = ‘ ‘]) который возвращает новую строку с заданным числом символов width, но добавляет символы fillchar уже справа:
Следующий метод String.split(sep=None, maxsplit=-1) возвращает коллекцию строк, на которые разбивается исходная строка String. Разбивка осуществляется по указанному сепаратору sep. Например:
"Иванов Иван Иванович".split(" ")
Мы здесь разбиваем строку по пробелам. Получаем коллекцию из ФИО. Тот же результат будет и при вызове метода без аргументов, то есть, по умолчанию он разбивает строку по пробелам:
"Иванов Иван Иванович".split()
А теперь предположим, перед нами такая задача: получить список цифр, которые записаны через запятую. Причем, после запятой может быть пробел, а может и не быть. Программу можно реализовать так:
digs = "1, 2,3, 4,5,6" digs.replace(" ", "").split(",")
мы сначала убираем все пробелы и для полученной строки вызываем split, получаем список цифр. Обратный метод String.join(список) возвращает строку из объединенных элементов списка, между которыми будет разделитель String. Например:
d = digs.replace(" ", "").split(",") ", ".join(d)
получаем строку «1, 2, 3, 4, 5, 6». Или так, изначально была строка: fio = "Иванов Иван Иванович" и мы хотим здесь вместо пробелов поставить запятые:
Теперь fio2 ссылается на строку с запятыми «Иванов,Иван,Иванович». Следующий метод String.strip() удаляет пробелы и переносы строк в начале и конце строки. Например:
возвращает строку «hello world». Аналогичные методы: String.rtrip() и String.ltrip() удаляют пробелы и переносы строк только справа или только слева. В заключение занятия я приведу список всех рассмотренных методов, которые хорошо было бы запомнить и применять по мере необходимости при работе со строками:
Название | Описание |
String.upper() | Возвращает строку с заглавными буквами |
String.lower() | Возвращает строку с малыми буквами |
String.count(sub[, start[, end]]) | Определяет число вхождений подстроки в строке |
String.find(sub[, start[, end]]) | Возвращает индекс первого найденного вхождения |
String.rfind(sub[, start[, end]]) | Возвращает индекс первого найденного вхождения при поиске справа |
String.index(sub[, start[, end]]) | Возвращает индекс первого найденного вхождения |
String.replace(old, new, count=-1) | Заменяет подстроку old на new |
String.isalpha() | Определяет: состоит ли строка целиком из буквенных символов |
String.isdigit() | Определяет: состоит ли строка целиком из цифр |
String.rjust(width[, fillchar = ‘ ‘]) | Расширяет строку, добавляя символы слева |
String.ljust(width[, fillchar = ‘ ‘]) | Расширяет строку, добавляя символы справа |
String.split(sep=None, maxsplit=-1) | Разбивает строку на подстроки |
String.join(список) | Объединяет коллекцию в строку |
String.strip() | Удаляет пробелы и переносы строк справа и слева |
String.rstrip() | Удаляет пробелы и переносы строк справа |
String.ltrip() | Удаляет пробелы и переносы строк слева |
Занятие получилось несколько справочным. Но, что поделать, некоторые возможности языка лучше сразу выучить, чтобы потом не изобретать велосипед и подменять уже существующие методы своими фрагментами программного кода. Запомнить все это также поможет практика, а я будут вас ждать на следующем занятии. Курс по Python: https://stepik.org/course/100707