Рядки
Робота з текстовими даними у Python реалізована через str-об'єкти або рядки.
Рядок — це незмінна впорядкована послідовність символів в деякому кодуванні. За замовчуванням використовується кодування UTF-8, але можна працювати майже з усіма відомими таблицями кодування символів. Для того щоб створити змінну типу "рядок", необхідно певний набір символів взяти в лапки.
Варіант 1. Одинарні лапки (апостроф) 'some text'
Варіант 2. Подвійні лапки "some text".
Різні варіанти використання лапок обумовлені тим, що при використанні одинарних лапок, можна в рядку вказати подвійні і навпаки.
str1 = ‘Авто “BMW”’
str2 = “Об’єкт”
Впорядкована послідовність означає, що до елементів рядку можна звертатися по індексу:
s = "Hello world!"
print(s[0]) # H
print(s[-1]) # !
Важливо! Індексація всіх послідовностей в Python починається з 0!
Незмінна послідовність означає, що якщо рядок вже створено, то змінити його не можна, можна тільки створити новий.
s = "Hello world!"
s[0] = "Q" # Тут буде викликано виключення (помилка) TypeError
Для об’єднання рядків використовують оператор «+»
s1, s2 = ‘Hello ‘, ‘world’
s = s1 + s2 # Hello world
Для багаторазового повторення використовують оператор «***»
S = ‘SPAM’ * 5
# SPAMSPAMSPAMSPAMSPAM
Досить часто, необхідно отримати не один якийсь символ (за індексом), а деякий набір символів за певними простими правилами. Наприклад: перші 5 символів, останні 3 символи, кожен другий символ. В таких завданнях замість перебору в циклі набагато зручніше використовувати так званий зріз (slice, slicing). Зріз – отримання з даного рядка набору з його символів. Зріз рядка також є рядком. Отримання одного символу рядка є найпростішим варіантом зрізу.
Задати зріз можна одним з двох варіантів:
str[start: stop]
str[start: stop: step]
Для рядку str береться зріз від символу з індексом start, до символу з індексом stop (не включаючи його), з кроком step (тобто будуть взяті символи з індексами start, start + step, start + 2 step* і т. д.). Також при записі зрізу деякі, а можливо і всі параметри можуть бути опущені (знаки двокрапки в записі все рівно залишаються). У випадку відсутності деяких параметрів їх значення встановлюється за замовчуванням, а саме: start = 0, stop = кількості символів рядку, step = 1.
У випадку, якщо параметри start і stop мають від’ємні значення, то нумерація відбувається з кінця (кількість символів рядка + від’ємний індекс). Якщо параметр step має від’ємне значення, то зріз береться cправа наліво. Приклади зрізів:
str = ‘ABCDEFGHIJ’
str[1] # ‘B’
str[1:4] # ‘BCD’
str[:4] # ‘ABCD’
str[4:] # ‘EFGHIJ’
str[-4:] # ‘GHIJ’
str[1:-1] # ‘BCDEFGHI’
str[1:-1:2] # ‘BDFH’
str[::-1] # ‘JIHGFEDCBA’
Кілька основних функцій для роботи з рядками
Для того щоб дізнатися кількість символів у рядку (довжину рядка), необхідно скористатися функцією len(рядок)
len('Привіт!') # 7
Для отримання коду символу можна скористатися функцією ord(c), за якою повертається ціле число, яке відповідає коду цього символу.
ord('a'), ord('€') # 97, 8364
Зворотною до функції ord() є функція chr(n), за якою для цілого числа n повертається символ (рядок, що є єдиним символом), для якого n є його кодом.
chr(97), chr(8364) # a, €*
Кілька основних методів для роботи з рядками
str.find(substr [, start [,end]]). Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end]. Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1.
my_str = 'barbarian'
my_str.find('bar') # 0
my_str.find('bar', 1) # 3
my_str.find('bar', 1, 2) # -1
str.rfind(substr [, start [,end]]). Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то повертається значення -1
my_str = 'barbarian'
my_str.rfind('bar') # 3
my_str.rfind('bar', 1) # 3
my_str.rfind('bar', 1, 2) # -1
str.index(substr [, start [,end]])
. Повертає найменший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться перше входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError.
my_str = 'barbarian'
my_str.index('bar') # 0
my_str.index('bar', 1) # 3
my_str.index('bar', 1, 2) # ValueError
str.rindex(substr [, start [,end]]). Повертає найбільший індекс, за яким знаходиться початок підрядка substr в зрізі str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу). Тобто знаходиться останнє входження підрядка в рядку. Значення, що повертається, є індексом рядка str. Якщо підрядок не знайдено, то виникає виняток ValueError
my_str = 'barbarian'
my_str.rindex('bar') # 3
my_str.rindex('bar', 1) # 3
my_str.rindex('bar', 1, 2) # ValueError
str.startswith(prefix[, start[, end]]). Повертає True, якщо зріз str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу) починається з префіксу prefix, , інакше – False.
my_str = 'Discworld'
my_str.startswith('Mad') # False
my_str.startswith('Disc') # True
my_str.startswith(('Disc', 'Mad')) # True
my_str.startswith('world', 4, 9) # True
str.endswith(suffix[, start[, end]]). Повертає True, якщо зріз str[start:end] закінчується на суфікс suffix, інакше – False.
my_str = 'Discworld'
my_str.endswith('jockey') # False
my_str.endswith('world') # True
my_str.endswith(('jockey', 'world')) # True
my_str.endswith('Disc', 0, 4) # True
str.count(substr [, start [,end]]). Повертає кількість входжень підрядка sub в зріз str[start:end] (необов’язкові параметри start та end інтерпретуються як нотації зрізу) без самоперетинів.
my_str = 'підрядок з рядків'
my_str.count('рядок') # 1
my_str.count('ряд') *# 2
my_str.count('ряд', 0, -1) # 2
my_str.count('ряд', 8) # 1
my_str.count('ряд', 1, 5) # 0
my_str.count('ряд', 1, 6) # 1
str.upper()
. Повертає копію рядка, в якому всі літери, записані в нижньому регістрі, будуть приведені до верхнього регістру
'SoMe СлОнов'.upper()
# SOME СЛОНОВ
str.lower(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру
'SoMe СлОнов'.lower()
# some слонов
str.swapcase(). Повертає копію рядка, в якому всі літери, записані в верхньому регістрі, будуть приведені до нижнього регістру, а нижньому – до верхнього.
'Кіт ОбОрмот!'.swapcase()
# кІТ оБоРМОТ!
str.title(). Повертає копію рядка, в якому перша літера кожного слова буде приведена до верхнього регістру, а всі інші – до нижнього.
'кіт ОбОрмот!'.title() # Кіт Обормот!
"they're bill's friends from the UK".title()
# They'Re Bill'S Friends From The Uk
str.capitalize(). Повертає копію рядка, в якому перший символ, якщо він є літерою, буде приведений до верхнього регістру, а всі інші літери до нижнього.
'пОЧАТИ З ВЕЛИКОЇ'.capitalize() # Почати з великої
str.replace(old, new[, count]). Повертає копію рядка, в якому всі входження підрядка old будуть замінені на новий підрядок new. Якщо задано парметри count, то буде виконано не більше чим count замін
my_str = 'barbarian'
my_str = my_str.replace('bar', 'mur') # 'murmurian'
my_str = my_str.replace('mur', 'bur', 1) # 'burmurian'
str.strip([chars]). Повертає копію рядка з вилученими початковими та кінцевими символами, вказаними в рядку chars. Якщо параметр chars відсутній або None, то вилучаються пропуски.
'abca'.strip('ac') # 'b'
' abca\n \t'.strip() # 'abca'
str.split(sep=None, maxsplit=-1). Повертає список слів, які отримуються розбиттям рядка за роздільником рядком sep str.join(iterable). Повертає рядок, який є результатом конкатенації всіх рядків з iterable. Під час конкатенації між рядковими елементами iterable буде розміщений рядок str.
'1,2,3'.split(',') # ['1', '2', '3']
'1,2,3'.split(',', maxsplit=1) # ['1', '2,3']
'1,2,,3,'.split(',') # ['1', '2', '', '3', '']
'1 2 3'.split() # ['1', '2', '3']
'1 2 3'.split(maxsplit=1) # ['1', '2 3']
' 1 2 3 '.split() # ['1', '2', '3']
str.isalpha(). Повертає True, якщо рядок є непорожнім і складається лише з алфавітних символів, інакше – False.
''.isalpha() # False
' '.isalpha() # False
'!@#'.isalpha() # False
'abc'.isalpha() # True
'123'.isalpha() # False
'abc123'.isalpha() # False
str.isdecimal(). Повертає True, якщо рядок є непорожнім і складається лише з десяткових цифр (десяткових символів), інакше – False.
''.isdecimal() # False
'0'.isdecimal() # True
'1'.isdecimal() # True
'1000'.isdecimal() # True
'1.1'.isdecimal() # False
'1 000'.isdecimal() # False
'a'.isdecimal() # False
str.isdigit(). Повертає True, якщо рядок є непорожнім і складається лише з цифр, інакше – False
''.isdigit() # False
' '.isdigit() # False
'!@#'.isdigit() # False
'abc'.isdigit() # False
'123'.isdigit() # True
'abc123'.isdigit() # False
str.islower(). Повертає True, якщо рядок містить принаймні одну літеру, і всі літери записані в нижньому регістрі, інакше – False.
'нижній lower'.islower() # True
'12'.islower() # False
str.isupper()
. Повертає True, якщо рядок містить принаймні
одну літеру, і всі літери записані в верхньому регістрі, інакше – False.
'ВЕРХНІЙ UPPER'.isupper() # True
'12'.isupper() # False