Lesson 5
Струны
1. Струны
Строку можно считывать со стандартного ввода, используя функцию input()
или определяемую в одинарных или двойных кавычках. Две строки могут быть объединены, и мы также можем повторить строку n раз, умножая ее на integer:
print('>_< ' * 5) # > _ <> _ <> _ <> _ <> _ <
Строка в Python представляет собой последовательность символов. Функция len(some_string)
возвращает количество символов в строке:
print(len('abcdefghijklmnopqrstuvwxyz')) # 26
Каждый объект в Python может быть преобразован в строку с помощью функции str(some_object)
. Поэтому мы можем преобразовать числа в строки:
s = str(2 ** 100) print(s) # 1267650600228229401496703205376 print(len(s)) # 31
2. Ломтики: одиночный символ
Срез дает из заданной строки один символ или некоторый фрагмент: подстрока или подпоследовательность.
Существует три формы срезов. Простейшая форма среза: один фрагмент символа S[i]
дает i
й символ строки. Мы будем считать символы, начинающиеся с 0. То есть, если
,
,
,
,
,
. Обратите внимание, что в Python для символов строки не существует отдельного типа. S[i]
также имеет тип str
, как и исходная строка.
Число i
в S[i]
называется индексом .
Если вы укажете отрицательный индекс, то он подсчитывается с конца, начиная с номера -1
. То есть
,
,
,
,
.
Подведем итог в таблице:
Строка S | ЧАС | е | L | L | о |
---|---|---|---|---|---|
Индекс | S [0] | S [1] | S [2] | S [3] | S [4] |
Индекс | S [-5] | S [-4] | S [-3] | S [-2] | S [-1] |
Если индекс в срезе S[i]
больше или равен len(S)
или меньше, чем -len(S)
, следующая ошибка вызывает IndexError: string index out of range
.
3. Срезы: подстрока
Slice с двумя параметрами S[a:b]
возвращает подстроку длины b - a
, начиная с символа в индексе a
и продолжая до символа с индексом b
, не считая последнего. Например, S[1:4] == 'ell'
, и вы можете получить ту же подстроку, используя S[-4:-1]
. Вы можете смешивать положительные и отрицательные индексы в одном и том же фрагменте, например, S[1:-1]
- это подстрока без первого и последнего символов строки (срез начинается с символа с индексом 1 и заканчивается индексом от -1, не считая его).
Срез с двумя параметрами никогда не вызывает IndexError
. Например, для S == 'Hello'
срез S[1:5]
возвращает строку 'ello'
, и результат будет таким же, даже если второй индекс очень большой, например S[1:100]
.
Если вы опустите второй параметр (но сохраните двоеточие), то срез идет до конца строки. Например, чтобы удалить первый символ из строки (ее индекс равен 0), возьмите срез S[1:]
. Аналогично, если вы опускаете первый параметр, Python берет срез из начала строки. То есть, чтобы удалить последний символ из строки, вы можете использовать срез S[:-1]
. Срез S[:]
соответствует самой строке S
4. Ломтики: неизменяемость струн
Любой фрагмент строки создает новую строку и никогда не изменяет исходную. В Python строки неизменяемы, т. Е. Они не могут быть изменены как объекты. Вы можете назначить переменную только новой строке, но старый останется в памяти.
На самом деле в Python нет переменных. Есть только имена, связанные с любыми объектами. Вы можете сначала связать имя с одним объектом, а затем - с другим. Можно ли связать несколько имен с одним и тем же объектом.
Давайте продемонстрируем, что:
s = 'Hello' t = s # s и t указывают на одну и ту же строку t = s[2:4] # теперь t указывает на новую строку 'll' print(s) # печатает «Hello», так как s не изменяется print(t) # отпечатки 'll'
5. Срезы: подпоследовательность
Если вы укажете срез с тремя параметрами S[a:b:d]
, третий параметр указывает шаг, такой же, как для range()
функций range()
. В этом случае берутся только символы со следующим индексом: a
a + d
, a + 2 * d
и т. Д. До и без символа с индексом b
. Если третий параметр равен 2, срез принимает каждый второй символ, и если шаг среза равен -1
, символы идут в обратном порядке. Например, вы можете изменить строку следующим образом: S[::-1]
. Давайте посмотрим на примеры:
s = 'abcdefg' print(s[1]) print(s[-1]) print(s[1:3]) print(s[1:-1]) print(s[:3]) print(s[2:]) print(s[:-1]) print(s[::2]) print(s[1::2]) print(s[::-1])
range()
функций range()
:s = 'abcdefghijklm' print(s[0:10:2]) for i in range(0, 10, 2): print(i, s[i])
6. Строковые методы: find () и rfind ()
Метод - это функция, привязанная к объекту. Когда метод вызывается, метод применяется к объекту и выполняет некоторые вычисления, связанные с ним. Методы вызываются как object_name.method_name(arguments)
. Например, в s.find("e")
метод string find()
применяется к строке s
с одним аргументом "e"
.
Метод find()
выполняет поиск подстроки, переданной как аргумент, внутри строки, на которую он вызывается. Функция возвращает индекс первого вхождения подстроки. Если подстрока не найдена, метод возвращает -1.
s = 'Hello' print(s.find('e')) # 1 print(s.find('ll')) # 2 print(s.find('L')) # -1
Аналогично, метод rfind()
возвращает индекс последнего вхождения подстроки.
s = 'abracadabra' print(s.find('b')) # 1 print(s.rfind('b')) # 8
Если вы вызываете find()
с тремя аргументами s.find(substring, left, right)
, поиск выполняется внутри среза s[left:right]
. Если вы укажете только два аргумента, например s.find(substring, left)
, поиск выполняется в срезе s[left:]
, то есть начиная с символа с индексом left
до конца строки. Метод s.find(substring, left, right)
возвращает абсолютный индекс относительно всей строки s
, а не срез.
s = 'my name is bond, james bond, okay?' print(s.find('bond')) # 11 print(s.find('bond', 12)) # 23
7. Строковые методы: replace ()
Метод replace()
заменяет все вхождения данной подстроки на другую. Синтаксис: s.replace(old, new)
принимает строку S
и заменяет все вхождения подстроки old
на подстроку new
. Пример:
print('a bar is a bar, essentially'.replace('bar', 'pub')) # «Паб - это паб, по сути,
Можно пройти третий count
аргумента, например: s.replace(old, new, count)
. Это делает replace()
, чтобы заменить только первый count
вхождений , а затем остановится.
print('a bar is a bar, essentially'.replace('bar', 'pub', 1)) # «Паб - это бар,
8. Строковые методы: count ()
Этот метод подсчитывает количество вхождений одной строки в другую строку. Простейшая форма: s.count(substring)
. Учитываются только неперекрывающиеся вхождения:
print('Abracadabra'.count('a')) # 4 print(('aaaaaaaaaa').count('aa')) # 5
Если вы укажете три параметра
, подсчет выполняется внутри среза s[left:right]
.