Рядки: тип str
Рядки в Python представлені типом str
і використовуються для збереження текстової інформації. Рядок — це послідовність символів, яка може містити літери, цифри, пробіли та спеціальні символи.
У цьому розділі:
Визначення рядка
Рядки можна задавати за допомогою одинарних ('...'
) або подвійних ("..."
) лапок:
s1 = 'Це рядок'
s2 = "Це теж рядок"
print(s1, s2)
Якщо рядок містить лапки, можна використовувати альтернативний тип лапок або екранування символа \
:
s3 = "Він сказав: 'Привіт!'"
s4 = 'Він сказав: "Привіт!"'
s5 = 'Він сказав: \'Привіт!\''
print(s3, s4, s5)
Для багаторядкових рядків використовуються потрійні лапки ('''...'''
або """..."""
):
s6 = '''Це багаторядковий
рядок у Python'''
print(s6)
Доступ до символів у рядку
Рядки є впорядкованими послідовностями, тож можна звертатися до окремих символів за індексом:
text = "Python"
print(text[0]) # 'P'
print(text[1]) # 'y'
print(text[2]) # 't'
print(text[3]) # 'h'
print(text[4]) # 'o'
print(text[5]) # 'n'
У Python, як і в більшості мов програмування, індексація рядків починається з нуля. Це означає, що перший символ має індекс 0, другий — 1, третій — 2 і так далі. Чому індексація починається саме з нуля? Причина має як історичне, так і технічне підґрунтя. У мовах програмування на кшталт C, елемент масиву або рядка зберігається в памʼяті як послідовність байтів, а індекс 0 означає зміщення на 0 байтів від початку масиву. Тобто перший елемент розташований без зміщення, другий — на 1 байт далі і так далі. Цей принцип зручний для реалізації та обчислень на низькому рівні, і був успадкований Python як частина загальноприйнятої практики. Уявіть книжку: якщо номер сторінки — це відстань від початку, то перша сторінка — це нульова позиція. Це може здатися незвичним на перший погляд, але така система дає змогу легше обчислювати позиції символів і працювати з підрядками.
У Python, окрім звичайної (позитивної) індексації, також підтримується відʼємна індексація. Це означає, що можна звертатися до символів рядка з кінця, використовуючи відʼємні числа:
s = "Python"
print(s[-1]) # 'n' — останній символ
print(s[-2]) # 'o' — передостанній символ
Відʼємний індекс -1 відповідає останньому символу, -2 — передостанньому і так далі. Такий підхід дуже зручний, коли потрібно швидко отримати кінець рядка без попереднього обчислення його довжини.
Можна уявити, що Python розглядає рядок як лінійку, яка має як позитивну шкалу (зліва направо), так і відʼємну (справа наліво):
P y t h o n
0 1 2 3 4 5 ← позитивні індекси
-6 -5 -4 -3 -2 -1 ← відʼємні індекси
Це робить роботу з рядками ще гнучкішою та зручною для обробки останніх символів, наприклад, при перевірці розширень файлів або зворотному обході тексту.
Якщо ви спробуєте звернутися до символу за індексом, який виходить за межі рядка, Python згенерує помилку IndexError
. Це означає, що ви намагаєтеся звернутися до позиції, якої не існує в рядку.
s = "Python"
print(s[10]) # IndexError: string index out of range
У цьому прикладі рядок "Python"
має довжину 6 символів, а отже, допустимі індекси — від 0 до 5. Індекс 10 виходить за межі, тому програма зупиниться з помилкою. Така ситуація схожа на спробу прочитати 11-ту сторінку в книжці, яка має лише 6 сторінок — програма не знайде такої сторінки і видасть помилку.
Рядки підтримують зрізи (slicing), що дозволяють отримувати підрядки:
text = "Python"
print(text[0:4]) # 'Pyth'
print(text[:3]) # 'Pyt' (з початку до 3-го символу)
print(text[2:]) # 'thon' (з 2-го символу до кінця)
print(text[::-1]) # 'nohtyP' (перевернутий рядок)
Операції з рядками
Операція | Опис | Приклад | Результат |
---|---|---|---|
+ |
Конкатенація (обʼєднання) | "Hello" + "world" |
"Helloworld" (зверніть увагу, що Python не додає автоматично пробіл між словами. |
* |
Повторення | "-" * 5 |
"-----" |
len() |
Функція, яка повертає довжину рядка (кількість символів) | len("Hello world") |
11 (зверніть увагу, що пробіл — це теж символ). |
in |
Оператор, який перевіряє, чи входить один рядок в інший | "Py" in "Python" |
True (результат завжди тип bool ). |
greeting = "Hello" + "world"
print(greeting) # 'Helloworld'
separator = "-" * 5
print(separator) # '-----'
length = len("Hello world")
print(length) # 11
print("Py" in "Python") # True
Методи з рядками
Рядок — це обʼект класу str
, та цей клас має ще декілька корисних методів. (Що таке обʼєкти, класи та обʼєктно-оріентоване програмування ми вивчимо пізніше.)
Метод | Опис | Приклад | Результат |
---|---|---|---|
lower() |
Перетворює у нижній регістр | "Hello".lower() |
"hello" |
upper() |
Перетворює у верхній регістр | "Hello".upper() |
"HELLO" |
strip() |
Видаляє зайві пробіли на початку і в кінці | " Hello ".strip() |
"Hello" |
replace(a, b) |
Замінює всі входження a на b | "Python".replace("P", "J") |
"Jython" |
split() |
Розбіває рядок за пробілами. Результат — список | "a b c".split() |
["a", "b", "c"] |
join(iterable) |
Обʼєднує рядки з переліку iterable в один рядок через роздільник | ""-".join(["a", "b", "c"]) |
"a-b-c" |
text = " Python is great "
print(text.lower()) # ' python is great '
print(text.upper()) # ' PYTHON IS GREAT '
print(text.strip()) # 'Python is great'
print(text.replace("great", "awesome")) # ' Python is awesome '
print(text.split()) # ['Python', 'is', 'great']
Форматування рядків
Python дозволяє вставляти змінні в рядки за допомогою форматованих рядків або f-рядків (мають символ f
перед лапками):
name = "Іван"
age = 25
message = f"Мене звати {name}, мені {age} років."
print(message) # 'Мене звати Іван, мені 25 років.'
Також можливе форматування рядка за допомогою його методу format()
:
message = "Мене звати {}, мені {} років.".format("Іван", 25)
print(message)
У f-рядках можна вставляти будь-які вирази Python, а не лише назви змінних. Вирази записуються в фігурних дужках {...}
, і Python автоматично обчислює їх значення.
a = 5
b = 3
print(f"{a} + {b} = {a + b}") # Виведе: 5 + 3 = 8
Усередині {}
можна використовувати математичні обчислення, виклик функцій, умовні вирази та навіть методи обʼєктів:
name = "Іван"
age = 30
print(f"{name.upper()} має {age * 12} місяців") # ІВАН має 360 місяців
Це робить f-рядки дуже зручними — замість попередньої підготовки всіх значень, програміст може просто вставити обчислення безпосередньо у текст. Уявіть, що це як калькулятор, вбудований у лапки: Python підставляє туди все, що ви написали, і показує результат прямо в рядку. Це особливо корисно для створення повідомлень, журналів подій, звітів або підказок для користувача.
Спеціальні символи в рядках
У Python рядки можуть містити спеціальні символи — це послідовності, що починаються з зворотної косої риски \
і позначають особливі символи, які не можна або незручно вводити напряму. Найуживаніші серед них:
\n
— новий рядок (переносить текст на наступну лінію);\t
— табуляція (вставляє горизонтальний відступ, як клавіша Tab);\\
— зворотна коса риска\
(виводить сам символ зворотної риски);\'
— одинарна лапка;\"
— подвійна лапка.
text = "Привіт!\nЯк справи?"
print(text)
# Виведе:
# Привіт!
# Як справи?
tabbed = "Імʼя:\tІван"
print(tabbed)
# Виведе:
# Імʼя: Іван
Спеціальні символи використовуються для форматування тексту — наприклад, створення багаторядкового виводу, вирівнювання даних у таблицях, або вставки лапок усередині рядка. Вони схожі на невидимі команди для друкарської машинки: \n
каже “перейди на новий рядок”, а \t
— “зроби відступ”. Щоб Python не сприймав \
як початок спецсимволу, його потрібно подвоїти: "C:\\Users\\Ivan"
.
Для зручної роботи з рядками, що містять багато зворотних рисок (наприклад, шляхів до файлів у Windows), можна використовувати сирі рядки (raw strings), де \
не сприймається як спеціальний символ. Такі рядки повинні мати символ r
перед лапками:
path = r"C:\Users\Ivan"
print(path) # Виведе: C:\Users\Ivan