Stepik: Введение в строки. Операции над строками. Методы
Строки задаются либо через одинарные, либо через двойные кавычки
s1 = "Panda" s2 = 'Panda-Kuma'
Если записать s1 = Panda
(без кавычек), тогда это будет восприниматься как имя переменной, и, если такой переменной нет, выдаст исключение.
Так же можно выводить текст с помощью тройных кавычек.
text = '''Сижу за решеткой в темнице сырой Вскормленный в неволе орел молодой Мой грустный товарищ махая крылом Кровавую пищу клюет под окном''' print(text) # Вывод: # Сижу за решеткой в темнице сырой # Вскормленный в неволе орел молодой # Мой грустный товарищ махая крылом # Кровавую пищу клюет под окном # этот же код можно записать и с помощью переноса строки \n text_alt = 'Сижу за решеткой в темнице сырой\nВскормленный в неволе орел молодой\nМой грустный товарищ махая крылом\nКровавую пищу клюет под окном' print(text_alt) # Вывод: # Сижу за решеткой в темнице сырой # Вскормленный в неволе орел молодой # Мой грустный товарищ махая крылом # Кровавую пищу клюет под окном
Базовые операции со строками
s1 = 'Я люблю' s2 = 'язык Python' print(s1 + s2) # склеивание строк (конкатенация) # Вывод: Я люблюязык Python print(s1 + ' ' + s2) # склеивание строк + знак пробела # Вывод: Я люблю язык Python
str()
- используется для того, чтобы преобразовать число (или что угодно) в строку
s1 = 'Я люблю' print(s1 + 5) # Вывод: TypeError: can only concatenate str (not "int") to str s1 = 'Я люблю' print(s1 + str(5)) # Вывод: Я люблю5 s2 = str(True) print(s1 + s2) # Вывод: Я люблюTrue
*
- оператор дублирования строки
print('ха ' * 5) # "умножаем" только на целые числа # Вывод: ха ха ха ха ха
len()
- вычисляет длину строки (количество знаков и символов)
print(len('hello')) # Вывод: 5 print(len('No! I\'m your father...')) # Вывод: 22
in
- позволяет проверять вхождение подстроки в строку
print('ab' in 'abracadabra') # Вывод: True a = 'ab' b = 'abracadabra' c = a in b print(c) # Вывод: True
Сравнение строк на равенство / неравенство
a = 'hello' print(a == 'hello') # == оператор сравнения # Вывод: True print(a == 'Hello') # == оператор сравнения # Вывод: False так как очень важен регистр! print(a != 'hello') # Вывод: False - как как строки равны print(a != 'Hello') # Вывод: True - так как строки не равны print('кот' > 'кит') # Вывод: True потому что "и" идет раньше "0" в алфавите, буква "и" считается меньше
ord()
- преобразование символа в код ASCII
print(ord('a')) # Вывод: 97
Обращение к отдельному символу строки
s = 'hello python' print(s[0], s[1]) # обращаемся к первому символу # Вывод: h e print(s[-1], s[-2]) # обращаемся к последнему и предпоследнему символу # Вывод: n o
Так же можно обратиться к конкретному символу без присвоения переменной
print('panda'[2]) # Вывод: n
Так же можно выделять несколько символов из строки - срез
'string'[start:stop:step]
start - откуда начинается срез
stop - где заканчивается (последний символ не включается)
step - шаг среза (например, шаг 3 означает, что в срез попадет каждый третий символ)
s = 'hello python' print(s[1:3]) # Вывод: el print(s[4:]) # Вывод: o python print(s[::2]) # каждый второй от начала до конца # Вывод: hlopto print(s[2:-2]) # Вывод: llo pyth print(s[::-1]) # инвертирование строки # Вывод: nohtyp olleh
Строка - неизменяемый тип. Если, допустим, нужно в строке 'hello python' сделать h заглавной, то можно это сделать так:
s = 'hello python' s2 = 'H' + s[1:] # создаем новую строку и склеиваем H и исходную строку со второго символа print(s2) # Вывод: Hello python
Основные методы строк
Синтаксис: Объект.Метод(Аргумент)
Метод upper()
- преобразует все символы нижнего регистра в верхний регистр
s = 'python' s_res = s.upper() print(s_res) # Вывод: PYTHON
Метод lower()
- преобразует все символы верхнего региста в нижний регистр
s = 'PYTHON' s_res = s.lower() print(s_res) # Вывод: python
Метод count()
- возвращает число повторений подстроки в строкеString.count(sub, start, end)
, [start, end] - необязательные элементы
msg = 'abracadabra' msg_res = msg.count('ra') print(msg_res) # Вывод: 2 - ra повторяется 2 раза msg_res1 = msg.count('ra', 4, 10) # ищем вхождение с 4 по 10 символ print(msg_res1) # Вывод: 0 - потому что последняя а не учувствует в поиске
Метод find()
- находит первое вхождение подстроки в строкуString.find(sub, start, end)
, [start, end] - необязательные элементы
msg = 'abracadabra' msg_res = msg.find('br') print(msg_res) # Вывод: 1 - то есть на символе с индексом 1 началось вхождение # если указать несуществующую подстроку msg = 'abracadabra' msg_res1 = msg.find('brr') print(msg_res1) # Вывод: -1 - если подстрока не входит в строку
Метод rfind()
- находит первое вхождение подстроки в строку, но, в отличии от find()
, ищет с права на лево, в обратном порядкеString.rfind(sub, start, end)
, [start, end] - необязательные элементы
msg = 'abracadabra' msg_res = msg.rfind('br') print(msg_res) # Вывод: 8
Метод index()
- работает так же, как и find()
, но в случае, если в строке не находит подстроку, index()
возвращает исключение
msg = 'abracadabra' msg_res = msg.index('brr') print(msg_res) # Вывод: ValueError: substring not found
Метод replace()
- выполняет замену подстрок на новую подстроку.String.replace(old, new, count = -1)
, где count - максимальное количество замен (-1 - без ограничений)
msg = 'abracadabra' msg_res = msg.replace('a', 'o') # меняем а на о print(msg_res) # Вывод: obrocodobro msg = 'abracadabra' msg_res1 = msg.replace('ab', 'AB') # меняем ab на AB print(msg_res1) # Вывод: ABracadABra msg = 'abracadabra' msg_res2 = msg.replace('ab', '') # удаляем ab print(msg_res2) # Вывод: racadra msg = 'abracadabra' msg_res3 = msg.replace('a', 'o', 2) # меняем а на о только на первых двух символах а print(msg_res3) # Вывод: obrocadabra
Метод isalpha()
- проверяет строку на то, состоит ли она только из букв
msg = 'abracadabra' msg_res = msg.isalpha() print(msg_res) # Вывод: True msg = 'abra cadabra' msg_res2 = msg.isalpha() print(msg_res2) # Вывод: False потому что строка не состоит целиком из букв, есть еще и пробел
Метод isdigit()
- проверяет строку на то, состоит ли она только из цифр
msg = '5.6' msg_res = msg.isdigit() print(msg_res) # Вывод: False потому что есть точка msg = '-56' msg_res2 = msg.isdigit() print(msg_res2) # Вывод: False потому что есть минус msg = '56' msg_res3 = msg.isdigit() print(msg_res3) # Вывод: True потому что только цифры
Метод rjust()
- возвращает новую строку с заданным числом символов width и, при необходимости, слева добавляет символы - заполнители fillchar.String.rjust(width, fillchar = '')
d = 'abc' d_res = d.rjust(5) print(d_res) # Вывод: abc - слева добавлено 2 символа пробела и строка теперь 5 символов
Часто используется при добавлении незначащих нулей перед цифрами
d = '12' d_res = d.rjust(4, '0') print(d_res) # Вывод: 0012
Метод ljust()
- возвращает новую строку с заданным числом символов width и, при необходимости, справа добавляет символы - заполнители fillchar.String.ljust(width, fillchar = '')
d = '12' d_res = d.ljust(10, '*') print(d_res) # Вывод: 12********
Метод split()
- возвращает коллекцию строк, на которую разбивается исходная строкаString.split(sep = None, maxsplit = -1)
, sep - фрагмент разбиения строки
name = 'Иванов Иван Иванович'.split(' ') print(name) # Вывод: ['Иванов', 'Иван', 'Иванович'] digs = '1, 2,3, 4, 5,6 ' digs = digs.replace(' ', '').split(',') print(digs) # Вывод: ['1', '2', '3', '4', '5', '6']
Метод join()
- из списка строк собирает единую строку
d = ['1', '2', '3', '4', '5', '6'] d1 = ', '.join(d) print(d1) # Вывод: 1, 2, 3, 4, 5, 6 fio = 'Иванов Иван Иванович' fio = ', '.join(fio.split()) print(fio) # Вывод: Иванов, Иван, Иванович
Метод strip()
, lstrip()
, rstrip()
- удаляет символы пробелов и переносов строк
a = ' hello world \n'.strip() # удаляет все символы пробелов и переносов строк в начале и в конце строки print(a) # Вывод: 'hello world' a = ' hello world \n'.lstrip() # удаляет все символы пробелов и переносов строк слева print(a) # Вывод: 'hello world ' a = ' hello world \n'.rstrip() # удаляет все символы пробелов и переносов строк справа print(a) # Вывод: ' hello world'