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...'))
# Вывод: 22in - позволяет проверять вхождение подстроки в строку
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'