Strings - Learn Python 3 - Snakify

Lesson 5
Струны


1. Струны

Строку можно считывать со стандартного ввода, используя функцию input() или определяемую в одинарных или двойных кавычках. Две строки могут быть объединены, и мы также можем повторить строку n раз, умножая ее на integer:

print('>_< ' * 5)  # &gt; _ &lt;&gt; _ &lt;&gt; _ &lt;&gt; _ &lt;&gt; _ &lt;

Строка в Python представляет собой последовательность символов. Функция len(some_string) возвращает количество символов в строке:

print(len('abcdefghijklmnopqrstuvwxyz'))  # 26

Каждый объект в Python может быть преобразован в строку с помощью функции str(some_object) . Поэтому мы можем преобразовать числа в строки:

s = str(2 ** 100)
print(s)  # 1267650600228229401496703205376
print(len(s))  # 31
Advertising by Google, may be based on your interests

2. Ломтики: одиночный символ

Срез дает из заданной строки один символ или некоторый фрагмент: подстрока или подпоследовательность.

Существует три формы срезов. Простейшая форма среза: один фрагмент символа S[i] дает i й символ строки. Мы будем считать символы, начинающиеся с 0. То есть, если S = 'Hello' , S[0] == 'H' , S[1] == 'e' , S[2] == 'l' , S[3] == 'l' , S[4] == 'o' . Обратите внимание, что в Python для символов строки не существует отдельного типа. S[i] также имеет тип str , как и исходная строка.

Число i в S[i] называется индексом .

Если вы укажете отрицательный индекс, то он подсчитывается с конца, начиная с номера -1 . То есть S[-1] == 'o' , S[-2] == 'l' , S[-3] == 'l' , S[-4] == 'e' , S[-5] == 'H' .

Подведем итог в таблице:

Строка 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 .

Advertising by Google, may be based on your interests

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

Advertising by Google, may be based on your interests

4. Ломтики: неизменяемость струн

Любой фрагмент строки создает новую строку и никогда не изменяет исходную. В Python строки неизменяемы, т. Е. Они не могут быть изменены как объекты. Вы можете назначить переменную только новой строке, но старый останется в памяти.

На самом деле в Python нет переменных. Есть только имена, связанные с любыми объектами. Вы можете сначала связать имя с одним объектом, а затем - с другим. Можно ли связать несколько имен с одним и тем же объектом.

Давайте продемонстрируем, что:

s = 'Hello'
t = s  # s и t указывают на одну и ту же строку
t = s[2:4]  # теперь t указывает на новую строку &#39;ll&#39;
print(s)  # печатает «Hello», так как s не изменяется
print(t)  # отпечатки &#39;ll&#39;
Advertising by Google, may be based on your interests

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])
Advertising by Google, may be based on your interests

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
Advertising by Google, may be based on your interests

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))
# «Паб - это бар,
Advertising by Google, may be based on your interests

8. Строковые методы: count ()

Этот метод подсчитывает количество вхождений одной строки в другую строку. Простейшая форма: s.count(substring) . Учитываются только неперекрывающиеся вхождения:

print('Abracadabra'.count('a'))
# 4
print(('aaaaaaaaaa').count('aa'))
# 5

Если вы укажете три параметра s.count(substring, left, right) , подсчет выполняется внутри среза s[left:right] .

Advertising by Google, may be based on your interests