Найти тему
Codeville | Python | SQL

Строки (str). Индексы. Срезы. Литералы строк. Методы.

Оглавление

Название данной статьи отсылает к моей предыдущей статье о списках, поэтому я настоятельно рекомендую изучить её, прежде чем переходить к этой (ссылка на статью: https://clck.ru/rKVAA).

Это всё определённо неспроста. Всё дело в том, что строки — это не тип, а структура данных, некоторыми аспектами похожая на списки.

Напомню о том, что списки — это коллекция элементов разных типов. В отличие от списков, строки — это коллекция символов. Списки — это изменяемая коллекция, т.к. мы запросто можем переназначить любой его элемент на какой-либо другой. Посмотрим на пример:

s = [1,2,3,4,5]
s[0] = 6
print(s) # [6,2,3,4,5]

Со строками такой «фокус» не прокатит:

s = 'Hello World!'
s[0] = 'K'

Если мы выполним этот код, то увидим ошибку:

Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
s[0] = 'K'
TypeError: 'str' object does not support item assignment

В данной ошибке говорится о том, что строка не поддерживает изменение. Из вышеописанного исходит вывод о том, что строки — это НЕИЗМЕНЯЕМЫЕ последовательности.

Индексы.

Строка, как и любая другая последовательность, поддерживает отрицательные и неотрицательные индексы.

s = 'Mama, just kill a man'
print(s[0]) # 'M'
print(s[6]) # 'j'
print(s[-1]) # 'n'
char = s[0]
print(char) # 'M'

Стоит заметить, что присваивание какой-то переменной значение по индексу или среза — нормальная практика для языка Python.

Срезы.

Если мы можем использовать индексы в строках, то закономерно можем использовать и срезы, что несомненно удобно, когда нам, например, нужно вырезать какое-то слово из строки.

Синтаксис среза строки — string[start:stop:step]

s = 'Mama, just kill a man'
mama = s[0:4]
print(mama) # 'Mama'

Сложение строк. Умножение строк на константу.

Строки могут складываться между собой, образуя новую строку. Такая операция называется конкатенацией.

s1 = 'Hello '
s2 = 'World!'
s3 = s1 + s2
print(s3) # 'Hello World!'

Помимо этого допускается умножение строки на константу:

s = 'Hello '
print(s*3) # 'Hello Hello Hello '

Строковые литералы.

Давайте рассмотрим какую-нибудь строку, в которой будем использовать обратный слеш (не будет вдаваться в нюансы, например, нам просто захотелось использовать обратный слеш в своей строке).

s = 'example str\ning' — например, вот такую строку

Давайте попробуем вывести такую строку на экран.

print(s)

И что же мы видим? Мы видим не то, что ожидали:

example str
ing

Мы видим, что строка после двух символов «\n» почему-то перенеслась.

Данный пример иллюстрирует использование так называемых строковых литералов на примере строки s = 'example str\ning', в которой строковый литерал \n переводит строку.

Существует много литералов, полная таблица перед вами:

Кроме того, существуют так называемые строки в апострофах и кавычках. Как вам известно, мы можем записывать строки или в кавычках («string») или в апострофах ('string'). Зачем в Python существует 2 вида записи строк? Всё очень просто. Для того, чтобы можно было использовать кавычки и апострофы в самой строке. Давайте посмотрим на примере и тогда всё станет ясно.

s1 = 'Название статьи — «Строки (str)»'
print(s1) # 'Название статьи — «Строки (str)»' — кавычки сохраняются
s2 = «He's a good boy»
print(s1) # 'He's a good boy' — апостроф сохраняется

Мы рассмотрим 2 самых распространённых литерала \n и \t по той самой причине, что прочие будут использоваться вами довольно редко.

Строковый литерал \n используется для перевода строки, как в примере выше, а строковый литерал \t используется для табуляции, т.е. добавлении между символами или в начале строки 4-х пробелов.

s = '123\t45'
print(s) # 123(4 пробела)45

Попробуйте сами выполнить этот код и убедитесь в том, что \t добавляет 4 пробела.

Однако, если нам уж ооочень хочется использовать обратный слеш, с которого, к вашему сведению, не может заканчиваться никакая строка, то мы в праве отменить всякое экранирование (так называется процесс обработки строковых литералов при исполнении программы) следующим образом:

s = r'123\t45'
print(s) # '123\t45'

Такие строки называются «сырыми», поэтому, если вам для каких-то целей необходимо отменить экранирование, то в ваша воля на использование r в любом регистре перед вашей строкой.

Методы строк.

  1. len(s) — длина строки
s = '12345'
print(len(s)) # 5

2. s.find(str,start,end) — поиск подстроки str в строке s, возвращает индекс первого вхождения подстроки, иначе возвращает -1. start и end ограничивают диапазон поиска подстроки.

s = '12345'
print(s.find('3')) # 2

3. s.rfind(str,start,end) — поиск подстроки str в строке s, возвращает индекс последнего вхождения подстроки, иначе возвращает -1. start и end ограничивают диапазон поиска подстроки.

s = '123451'
print(s.rfind('1')) # 5

4. s.index(str, start,end) — возвращает индекс первого вхождения подстроки str в строку s, иначе вызывает ValueError

s = '12345'
print(s.index('3')) # 2

5. s.rindex(str, start,end) — возвращает индекс последнего вхождения подстроки str в строку s, иначе вызывает ValueError

s = '123451'
print(s.rindex('1')) # 5

6. s.replace(шаблон, замена, maxcount) — замена шаблона на замену в строке s, maxcount ограничивает число замен.

s = '123123123'
print(s.replace('123', '456')) # '456456456'
s = '123123123'
print(s.replace('123', '456',1)) # '456123123'

7. s.split(char) — разбиение строки s по символу char

s = 'sym sym sym'
l = s.split(' ') — разбиение по символу «пробел»
print(l) # ['sym', 'sym', 'sym']

8. s.isdigit() — проверяет состоит ли строка из цифр, возвращает значение True или False (тип boolean), то есть истина или ложь.

s = '123'
print(s.isdigit()) # True
s = '123a'
print(s.isdigit()) # False

9. s.isalpha() — проверяет состоит ли строка из букв. Служебные символы — не буквы

s = 'fdgh'
print(s.isalpha()) # True
s = '123ff'
print(s.isalpha()) # False
s = 'string!@#$%^'
print(s.isalpha()) # False

10. s.isalnum() — проверяет состоит ли строка из букв или цифр.

s = '123aaa'
print(s.alnum()) # True
s = '123'
print(s.alnum()) # True
s = 'aaa'
print(s.alnum()) # True
s = '123aaa!@#$%'
print(s.alnum()) # False

11. s.islower() — проверяет состоит ли строка из символов нижнего регистра.

s = 'hello world!'
print(s.islower()) # True
s = 'Hello World!'
print(s.islower()) # False
s = 'HELLO WORLD' #
print(s.islower()) # False

12. s.isupper() — проверяет состоит ли строка из символов верхнего регистра.

s = 'hello world!'
print(s.isupper()) # False
s = 'Hello World!'
print(s.islower()) # False
s = 'HELLO WORLD' #
print(s.islower()) # True

13. s.startswith(str) — проверяет начинается ли строка s с подстроки str

s = 'Hello'
print(s.startswith('He')) # True

14. s.istitle() — проверяет начинаются ли слова в строке с заглавной буквы.

s = 'Hi, My Name Is Gavriiil'
print(s.istitle()) # True
s = 'Hi, My Name is Gavriiil'
print(s.istitle()) # False

15. s.upper() — преобразует строку к верхнему регистру.

s = 'hello'
print(s.upper()) # HELLO

16. s.lower() — преобразует строку к верхнему регистру.

s = 'HELLO'
print(s.lower()) # hello

17. s.endswith(str) — проверяет оканчивается ли строка s с подстроки str.

s = 'My name is Max'

print(s.endswith('Max')) # True

18. s.join(l) — «собирает» строку s из списка l

l = [ 'h', 'e', 'l', 'l', 'o' ]
s = ''
print(s.join(l)) # 'hello'

19. s.capitalize() — переводит первый символ строки в верхний регистр, а остальные — в нижний.

s = 'hELLO WORLD'
print(s.capitalize()) # 'Hello world'

20. s.count(str, start, end) — возвращает количество полных вхождений подстроки str в строку s. start и end ограничивают диапазон поиска.

s = 'h3333h'
print(s.count('3')) # 4

21. s.swapcase() — переводит символы нижнего регистра в верхний, а верхнего — в нижний.

s = 'Hello World!'
print(s.swapcase()) # 'hELLO wORLD!'

22. s.title() — переводит первую букву каждого слова строки s в верхний регистр, остальные — в нижний

s = 'hI, mY nAME iS aBRACHAM'
print(s.title()) # 'Hi, My Name Is Abracham'
Наука
7 млн интересуются