Strings
Оператор складання рядків+
+
+
- Оператор конкатенації рядків. Він повертає рядок, що складається з інших рядків, як показано тут:
Оператор множення рядків*
*
*
- Оператор створює кілька копій рядка. Якщо s
це рядок, а n
ціле число, будь-який з наступних виразів повертає рядок, що складається з n
об'єднаних копій s
:
s * n
n * s
Ось приклади множення рядків:
Значення множника n
має бути цілим позитивним числом. Воно може бути нулем або негативним, але в цьому випадку результатом буде порожній рядок:
Якщо ви створите рядкову змінну і перетворите її на порожній рядок, за допомогою 'py' * -6
, хтось буде справедливо вважати вас трохи дурним. Але це спрацює.
Оператор приладдя підрядкиin
in
Python також надає оператор приладдя, який можна використовувати для маніпуляцій з рядками. Оператор in
повертає True
, якщо підрядок входить у рядок, і False
якщо немає:
Є також оператор not in
, у якого зворотна логіка:
Вбудовані функції рядків у python
Python надає безліч функцій, вбудованих в інтерпретатор. Ось кілька, які працюють із рядками:
Функція | Опис |
chr() | Перетворює ціле число на символ |
ord() | Перетворює символ на ціле число |
len() | Повертає довжину рядка |
str() | Змінює тип об'єкта на |
Детальніше про них нижче.
Функціяord(c)
повертає числове значення для символу.
На базовому рівні комп'ютери зберігають усю інформацію як цифр. Для представлення символьних даних використовується схема перекладу, яка містить кожен символ із його репрезентативним номером.
Найпростіша схема у повсякденному використанні називається ASCII . Вона охоплює латинські символи, з якими ми найчастіше працює. Для цих символів ord(c)
повертає значення ASCII для символу c
:
ASCII прекрасний, але є багато інших мов у світі, які часто зустрічаються. Повний набір символів, які можуть бути представлені в коді, набагато більше звичайних латинських літер, цифр і символом.
Unicode — це сучасний стандарт, який намагається надати числовий код для всіх можливих символів, усіма можливими мовами, на кожній можливій платформі. Python 3 підтримує Unicode, у тому числі дозволяє використовувати символи Unicode у рядках.
Функція ord()
також повертає числові значення для символів Юнікод:
Функціяchr(n)
повертає символьне значення для цілого числа.
chr()
діє назад ord()
. Якщо встановлено числове значення n
, chr(n)
повертає рядок, що представляє символ n
:
chr()
також обробляє символи Юнікоду:
Функціяlen(s)
повертає довжину рядка.
len(s)
повертає кількість символів у рядку s
:
Функціяstr(obj)
повертає рядкову виставу об'єкта.
Практично будь-який об'єкт Python може бути представлений як рядок. str(obj)
повертає рядкове подання об'єкта obj
:
Індексація рядків
Часто в мовах програмування окремі елементи в упорядкованому наборі даних можуть бути доступні за допомогою числового індексу або ключа. Цей процес називається індексація.
У рядках Python є впорядкованими послідовностями символьних даних і можуть бути проіндексовані. Доступ до окремих символів у рядку можна отримати, вказавши ім'я рядка, за яким слідує число у квадратних дужках []
.
Індексація рядків починається з нуля: перший символ має індекс 0
, наступного 1
тощо. Індекс останнього символу в python - "довжина рядка мінус один".
Наприклад, схематичне представлення індексів рядка 'foobar'
виглядає так:
Окремі символи доступні за індексом таким чином:
Спроба звернення за індексом більшим len(s) - 1
, ніж призводить до помилки IndexError
:
Індекси рядків можуть бути зазначені негативними числами. У цьому випадку індексування починається з кінця рядка: -1
відноситься до останнього символу, -2
передостаннього і так далі. Ось така ж діаграма, що показує як позитивні, так і негативні індекси рядка 'foobar'
:
Ось кілька прикладів негативного індексування:
Спроба звернення за індексом меншим -len(s)
, ніж призводить до помилки IndexError
:
Для будь-якого непустого рядка s
, код s[len(s)-1]
і s[-1]
повертають останній символ. Немає індексу, який застосовується до порожнього рядка.
Зрізи рядків
Python також допускає можливість вилучення підрядки з рядка, відому як 'string slice'. Якщо s
це рядок, вираз форми s[m:n]
повертає частину s
, що починається з позиції m
і до позиції n
, але не включаючи позицію:
Пам'ятайте: індекси рядків у python починаються з нуля. Перший символ у рядку має індекс
0
. Це стосується і зрізу.
Знову ж таки, другий індекс вказує символ, який не включений до результату. Символ 'n'
у наведеному вище прикладі. Це може здатися трохи не інтуїтивним, але дає результат: вираз s[m:n]
поверне підрядок, який є різницею n - m
в даному випадку 5 - 2 = 3
.
Якщо пропустити перший індекс, зріз починається з початку рядка. Таким чином, s[:m]
= s[0:m]
:
Аналогічно, якщо опустити другий індекс s[n:]
, зріз триває від першого індексу до кінця рядка. Це хороша, лаконічна альтернатива більш громіздкою s[n:len(s)]
:
Для будь-якого рядка s
і будь-якого цілого n
числа ( 0 ≤ n ≤ len(s)
), s[:n] + s[n:]
буде s
:
Пропуск обох індексів повертає вихідний рядок. Це не копія, це посилання на вихідний рядок:
Якщо перший індекс у зрізі більший або дорівнює другому індексу, Python повертає порожній рядок. Це ще один не очевидний спосіб згенерувати порожній рядок, якщо ви його шукали:
Негативні індекси можна використовувати і зі зрізами. Ось приклад коду Python:
Крок для зрізу рядка
Існує ще один варіант синтаксису зрізу, про який варто згадати. Додавання додаткового :
та третього індексу означає крок, який вказує, скільки символів слід пропустити після отримання кожного символу в зрізі.
Наприклад, для рядка 'python'
зріз 0:6:2
починається з першого символу і закінчується останнім символом (усім рядком), кожен другий символ пропускається. Це показано на наступній схемі:
Ілюстративний код показаний тут:
Як і у випадку з простим зрізом, перший та другий індекси можуть бути пропущені:
Ви можете також вказати негативне значення кроку, в цьому випадку Python йде з кінця рядка. Початковий/перший індекс повинен бути більшим за кінцевий/другий індекс:
У наведеному вище прикладі 5:0:-2
означає «почати з останнього символу і робити два кроки назад, але не включаючи перший символ.»
Коли ви йдете назад, якщо перший та другий індекси пропущені, значення за замовчуванням застосовуються так: перший індекс – кінець рядка, а другий індекс – початок. Ось приклад:
Це загальна парадигма для розвороту (reverse) рядка:
Форматування рядка
У Python версії 3.6 було представлено новий спосіб форматування рядків. Ця функція офіційно названа літералом відформатованого рядка, але зазвичай згадується як f-string.
Можливості форматування рядків величезні і не будуть докладно описані тут.
Однією простою особливістю f-рядків, які можна почати використовувати відразу, є інтерполяція змінної. Ви можете вказати ім'я змінної безпосередньо у f-рядковому літералі ( f'string'
), і python замінить ім'я відповідним значенням.
Наприклад, припустимо, що потрібно відобразити результат арифметичного обчислення. Це можна зробити за допомогою простого print()
та оператора ,
, що розділяє числові значення та рядкові:
Але це громіздко. Щоб виконати те саме за допомогою f-рядка:
Напишіть
f
абоF
перед лапками рядка. Це вкаже python, що це f-рядок замість стандартного.Вкажіть будь-які змінні для відтворення у фігурних дужках (
{}
).
Код з використанням f-string, наведений нижче, виглядає набагато чистіше:
Будь-який з трьох типів лапок у python можна використовувати для f-рядка:
Зміна рядків
Рядки - один з типів даних, які Python вважає незмінними, що означає неможливість їх змінювати. Як ви побачите нижче, python дає можливість змінювати (замінювати і перезаписувати) рядки.
Такий синтаксис приведе до помилки TypeError
:
Насправді немає особливої потреби змінювати рядки. Зазвичай можна легко згенерувати копію вихідного рядка з необхідними змінами. Є мінімум два способи зробити це в python. Ось перший:
Є вбудований метод string.replace(x, y)
:
Last updated