Доброго времени суток, читатели, зрители моего канала programmer's notes.
Данная статья это приложение к уроку 8.
Строковые переменные в Python. Методы
Восьмой урок был посвящен строковым переменным. Напомню, что для выполнения каких-либо действий со строками можно использовать
- Глобальные функции. Например len() - строки, int() - преобразование строки в число (если возможно) и т.д.
- Операторы. Например + - конкатенация (объединение) строк, * - дублирование строки.
- Методы строк. Сегодня рассмотрим основные методы. В восьмом уроке говорилось о методе strip() - отбрасывание пробелов (и других управляющих или неотображаемых символов) слева и справа, isdigit() - проверка того, состоит строка только из цифр или нет. Кроме метода strip() есть также lstrip() и rstrip() которые отбрасывают неотображаемые символы только слева или только справа. Мы не будем их ниже описывать, поскольку они в сущности ни чем не отличаются от метода strip().
К отдельным символам в строке можно обращаться с помощью индекса.
s = "qwerty"
print(s[2])
Результат выполнения строк
e
Список методов с пояснениями
Решил, что полный (ну почти) справочник любому изучающему Python пригодится.
Начнем с методов, которые начинаются с предлога is. Они занимаются проверкой строки на предмет ее содержания.
isspace() - проверка того, состоит ли строка из неотображаемых символов. Чаще всего речь речь идет о пробелах. Но это могут быть символы табуляции, перевода строки т.д. В одном из уроков мы поговорим о таких символов. Например
s = ' '
print(s.isspace())
Результат выполнения строк программы
True
isupper(), islower() — проверяют состоит ли строка только из заглавных или только из прописных букв. При этом наличие в строке других символов не влияет на результат. Например
s = 'абвюwqwe ^12'
print(s.islower())
Результат
True
s = 'абвюwqwe ^12Н'
print(s.islower())
Результат выполнения фрагмента
False
isdigit() — состоит ли строка только из цифр. Если в строке только цифры, то метод возвращает True. В видеоуроке был приведен пример. Подчеркнем, что наличие любых других символов видимых или невидимых приводит к тому, что метод возвращает False.
isalpha() — состоит ли строка только из букв (русский, латинский алфавит, а также буквы других алфавитов). Например
s = 'asdYUPвапы'
print(s.isalpha())
Результат выполнения строк
True
s= 'ǑᆶasdYUPвапы'
print(s.isalpha())
Эти строки тоже дают True
Если у вас нет первых двух символов в редакторе, то их можно вывести как \ucode, где code - код в 16-теричной кодировке, который легко можно найти в таблице символов utf-8. В Интернет таких ресурсов множество.
isalnum() - состоит ли строка только из букв и цифр. Метод возвращает True если строка состоит только букв, только из цифр, из букв и цифр.
istitle() — определяет начинаются ли слова в строке с заглавных букв. Например
s = '222 Лфывы Ghj; Ioop'
print(s.istitle())
Результат выполнения фрагмента
True
Слово состоящее из цифр было просто проигнорировано. При этом игнорируются вообще все не алфавитные символы в начале слова (sic!). Между словами не обязательно должны быть пробелы, это могут быть другие не алфавитные символы, например знаки препинания или даже цифры. Например
s = '222 Лфывы Ghj1№Щoop'
print(s.istitle())
Результат
True
а
s = '222 Лфывы Ghj1№щoop'
print(s.istitle())
Результат выполнения
False
Следующая группа методов посвящена поиску в строке.
Первое я хотел бы здесь вспомнить это оператор in. Он работает для разных типов данных, в том числе и строк. С помощью него можно определить, входит ли данная строка как часть в другую строку. Пример программы см. ниже (primer12.py)
Однако, с помощью этого оператора не возможно узнать сколько раз встречается строка в другой строке и где она расположена.
Четыре метода find(), index(), rfind(), rindex() используются для поиска подстроки в строке. Первые два метода осуществляют поиск слева направо, последние два - справа налево. Все методы возвращают индекс символа с которого начинается найденная подстрока. Индекс во всех четырех методах отсчитывается с начала строки. При этом если строка не найдена вообще то: find(), rfind() возвращают -1, а index(), rindex() вызывают исключения, которое можно отловить операторами try - except. Но поскольку мы этими операторами еще не занимались, то остановимся на методах find(), rfind().
В общем случае формат find() такой
s.find(s1, begin, end), где s1 - строка, которая ищется, begin - end определяют область поиска (номера символов между которыми осуществляется поиск). Если опустить end, то поиск будет осуществляться до конца строки. Если опустить и begin и end, то поиск будет осуществляться с начала строки и до ее конца. Формат вызова метода rfind() точно такой, только не будем забывать, что поиск будет осуществляться справа налево. Например
s1 = 'qwertyuioptyuz'
s2 = 'tyu'
print(s1.find(s2))
print(s1.find(s2, 5))
Результат выполнения программы
4
10
Аналогично
s1 = 'qwertyuioptyuz'
s2 = 'tyu'
print(s1.rfind(s2))
print(s1.rfind(s2, 0, 9))
Результат
10
4
Последний результат, возможно, сразу будет не понятен, но я напоминаю, последние два параметры определяют область поиска. В нашем случае (последняя строка), поиск начнется с символа с номером 9 влево.
Приведем пример программы, которая ищет все вхождения строки в другой строке.
Результат выполнения программы
4
10
21
24
count() - еще один метод, который можно отнести к поиску в строке. Метод считает сколько раз в строке встречается другая строка. Формат метода
s.count(s1, begin, end) — где s1 строка для поиска, begin-end область для поиска. Если опустить end, то поиск осуществляется до конца строки, если опустить begin и end, то поиск осуществляется по всей строке. Например
s1 = 'qwqerqwtyq'
print(s1.count('qw'))
Результат выполнения строк
2
Обратимся теперь к остальным методам строк.
split(sym) — разделение строки по разделителю. Разделитель это строка или один символ. Если разделитель не указан, то то по умолчанию берется пробел. В результате выполнения метода получается список, состоящий из частей строки. Списки мы с вами не изучали, но пример я все равно приведу. Потом он станет для вас понятнее.
s1 = 'qwertyuioptyuz'
s2 = 'tyu'
ls = s1.split(s2) # получается список
print(ls)
В результате выполнения получим
['qwer', 'iop', 'z']
Попробуйте разобраться.
replace() — заменяет в строке одну подстроку на другую. Общий формат метода
s.replace(s1, s2, mxc) - s1 - подстрока, которая ищется в строке s и меняется на строку s2. mxc - сколько замен допустимо. Если этот параметр опустить, то операция применяется ко всем вхождениям. Например
s1 = 'qwertyuioptyuz'
s2 = 'tyu'
s3 = '3'
s1 = s1.replace(s2, s3)
print(s1)
Результат выполнения
qwer3iop3z
И вот тут я вам напомню видеоурок. В нем я говорил, что нужно четко понимать, меняет ли метод объект или создает новый. В данном случае речь идет о строке. Происходит замена и создается новая строка. Старая при этом не меняется. Но в нашем случае мы приравниваем ей новое значения, в сущности создаем новый объект, но под старым именем. Старый же объект (строка) автоматически удаляется из памяти. Заумно, но зато правильно. ;)
upper(), lower() — преобразуют алфавитные символы в строке к верхнему или нижнему регистру. Например
s1 = 'qwertyuioptyuz'
s1 = s1.upper()
print(s1)
Результат выполнения строк программы
QWERTYUIOPTYUZ
Не забываем при это то, что сама строка опять же не меняется (см. предыдущий пример), мы создаем новую строку.
startswith(), endswith() - эти методы проверяют начинается ли строка с указанной подстроки или заканчивается ли строка с указанной подстроки. Например
s1 = 'qwertyuioptyuz'
print(s1.startswith('qwerty'))
Результат выполнения данных строк
True
capitalize() — переводит первый алфавитный символ строки в верхний регистр, остальные переводит в нижний регистр.
s1 = 'папа у Васи силен в Математике'
s1 = s1.capitalize()
print(s1)
Результат выполнения программы
Папа у васи силен в математике
swapcase() - переводит букву из нижнего регистра в верхний, а из верхнего в нижний. Например
s1 = 'папа у Васи силен в Математике'
s1 = s1.swapcase()
print(s1)
Результат выполнения программы
ПАПА У вАСИ СИЛЕН В мАТЕМАТИКЕ
center() - метод центрирует строку. Формат метода
s.center(wd, s1), где wd новая ширина строки, s1 - символ заполнения. Если не указывать последний параметр, то по-умолчанию берется пробел. При этом wd должно быть больше длины строки, в противном случае никакого действия производиться не будет. Например
s1 = 'qwerty'
s1 = s1.center(14, '*')
print(s1)
Результат выполнения программы
****qwerty****
expandtabs() - метод заменяет символы табуляции на пробелы. Можно указать в качестве параметра размер табуляции в пробелах, если не указывать, то принимается, что одной табуляции соответствует 8 пробелов. Продемонстрировать работу данного метода весьма затруднительно в тексте статьи, попробуйте поупражняться с ним сами.
title() — первая буква каждого слова переводится в верхний регистр, остальные буквы переводятся в нижний. Например
s1 = 'где это Видано, где это слыхано, ПАПА решает, а вася сдает'
s1 = s1.title()
print(s1)
Результат работы программы
Где Это Видано, Где Это Слыхано, Папа Решает, А Вася Сдает
zfill(), ljust(), rjust() - группа схожих методов. zfill() - удлиняет строку согласно указанному параметру, если в этом есть необходимость. Удлинение происходит за счет нулей в начале строки. Два других метода делают сроку не меньше указанной длины, добавляя справа или слева нужное количество указанных символов. По умолчанию используется пробел. Например
s1 = 'qwerty'
s1 = s1.rjust(10, '+')
print(s1)
Результат выполнения фрагмента
++++qwerty
Я перечислил не все методы. Методу format() будет посвящен отдельный урок. Методы partition() и rpartition() преобразуют строку в кортеж. Кортежи мы еще не изучали. Но просто приведу пример.
s1 = 'qqqqrtssssrtggg'
lk = s1.partition('rt')
print(lk)
результат выполнения данных строк
('qqqq', 'rt', 'ssssrtggg')
Метод разбивает строку на три части и помещает в кортеж. Первый элемент - строка до указанного шаблона, второй - сам шаблон, третий - оставшаяся часть строки.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.
#программирование #языки программирования #python #программисты