Strings

Оператор складання рядків+

+- Оператор конкатенації рядків. Він повертає рядок, що складається з інших рядків, як показано тут:

>>> s = 'py'
>>> t = 'th'
>>> u = 'on'

>>> s + t
'pyth'
>>> s + t + u
'python'

>>> print('Привет, ' + 'Мир!')
Go team!!!

Оператор множення рядків*

*- Оператор створює кілька копій рядка. Якщо sце рядок, а nціле число, будь-який з наступних виразів повертає рядок, що складається з nоб'єднаних копій s:

s * n n * s

Ось приклади множення рядків:

>>> s = 'py.'

>>> s * 4
'py.py.py.py.'
>>> 4 * s
'py.py.py.py.'

Значення множника nмає бути цілим позитивним числом. Воно може бути нулем або негативним, але в цьому випадку результатом буде порожній рядок:

>>> 'py' * -6
''

Якщо ви створите рядкову змінну і перетворите її на порожній рядок, за допомогою 'py' * -6, хтось буде справедливо вважати вас трохи дурним. Але це спрацює.

Оператор приладдя підрядкиin

Python також надає оператор приладдя, який можна використовувати для маніпуляцій з рядками. Оператор inповертає True, якщо підрядок входить у рядок, і Falseякщо немає:

>>> s = 'Python'
>>> s in 'I love Python.'
True
>>> s in 'I love Java.'
False

Є також оператор not in, у якого зворотна логіка:

>>> 'z' not in 'abc'
True
>>> 'z' not in 'xyz'
False

Вбудовані функції рядків у python

Python надає безліч функцій, вбудованих в інтерпретатор. Ось кілька, які працюють із рядками:

Функція

Опис

chr()

Перетворює ціле число на символ

ord()

Перетворює символ на ціле число

len()

Повертає довжину рядка

str()

Змінює тип об'єкта наstring

Детальніше про них нижче.

Функціяord(c) повертає числове значення для символу.

На базовому рівні комп'ютери зберігають усю інформацію як цифр. Для представлення символьних даних використовується схема перекладу, яка містить кожен символ із його репрезентативним номером.

Найпростіша схема у повсякденному використанні називається ASCII . Вона охоплює латинські символи, з якими ми найчастіше працює. Для цих символів ord(c)повертає значення ASCII для символу c:

>>> ord('a')
97
>>> ord('#')
35

ASCII прекрасний, але є багато інших мов у світі, які часто зустрічаються. Повний набір символів, які можуть бути представлені в коді, набагато більше звичайних латинських літер, цифр і символом.

Unicode — це сучасний стандарт, який намагається надати числовий код для всіх можливих символів, усіма можливими мовами, на кожній можливій платформі. Python 3 підтримує Unicode, у тому числі дозволяє використовувати символи Unicode у рядках.

Функція ord()також повертає числові значення для символів Юнікод:

>>> ord('€')
8364
>>> ord('∑')
8721

Функціяchr(n) повертає символьне значення для цілого числа.

chr()діє назад ord(). Якщо встановлено числове значення n, chr(n)повертає рядок, що представляє символ n:

>>> chr(97)
'a'
>>> chr(35)
'#'

chr()також обробляє символи Юнікоду:

>>> chr(8364)
'€'
>>> chr(8721)
'∑'

Функціяlen(s) повертає довжину рядка.

len(s)повертає кількість символів у рядку s:

>>> s = 'Простоя строка.'
>>> len(s)
15

Функціяstr(obj) повертає рядкову виставу об'єкта.

Практично будь-який об'єкт Python може бути представлений як рядок. str(obj)повертає рядкове подання об'єкта obj:

>>> str(49.2)
'49.2'
>>> str(3+4j)
'(3+4j)'
>>> str(3 + 29)
'32'
>>> str('py')
'py'

Індексація рядків

Часто в мовах програмування окремі елементи в упорядкованому наборі даних можуть бути доступні за допомогою числового індексу або ключа. Цей процес називається індексація.

У рядках Python є впорядкованими послідовностями символьних даних і можуть бути проіндексовані. Доступ до окремих символів у рядку можна отримати, вказавши ім'я рядка, за яким слідує число у квадратних дужках [].

Індексація рядків починається з нуля: перший символ має індекс 0, наступного 1тощо. Індекс останнього символу в python - "довжина рядка мінус один".

Наприклад, схематичне представлення індексів рядка 'foobar'виглядає так:

Окремі символи доступні за індексом таким чином:

>>> s = 'foobar'

>>> s[0]
'f'
>>> s[1]
'o'
>>> s[3]
'b'
>>> s[5]
'r'

Спроба звернення за індексом більшим len(s) - 1, ніж призводить до помилки IndexError:

>>> s[6]
Traceback (most recent call last):
  File "", line 1, in <module>
    s[6]
IndexError: string index out of range

Індекси рядків можуть бути зазначені негативними числами. У цьому випадку індексування починається з кінця рядка: -1відноситься до останнього символу, -2передостаннього і так далі. Ось така ж діаграма, що показує як позитивні, так і негативні індекси рядка 'foobar':

Ось кілька прикладів негативного індексування:

>>> s = 'foobar'
>>> s[-1]
'r'
>>> s[-2]
'a'
>>> len(s)
6
>>> s[-len(s)] # отрицательная индексация начинается с -1
'f'

Спроба звернення за індексом меншим -len(s), ніж призводить до помилки IndexError:

>>> s[-7]
Traceback (most recent call last):
  File "", line 1, in <module>
    s[-7]
IndexError: string index out of range

Для будь-якого непустого рядка s, код s[len(s)-1]і s[-1]повертають останній символ. Немає індексу, який застосовується до порожнього рядка.

Зрізи рядків

Python також допускає можливість вилучення підрядки з рядка, відому як 'string slice'. Якщо sце рядок, вираз форми s[m:n]повертає частину s, що починається з позиції mі до позиції n, але не включаючи позицію:

>>> s = 'python'
>>> s[2:5]
'tho'

Пам'ятайте: індекси рядків у python починаються з нуля. Перший символ у рядку має індекс 0. Це стосується і зрізу.

Знову ж таки, другий індекс вказує символ, який не включений до результату. Символ 'n'у наведеному вище прикладі. Це може здатися трохи не інтуїтивним, але дає результат: вираз s[m:n]поверне підрядок, який є різницею n - mв даному випадку 5 - 2 = 3.

Якщо пропустити перший індекс, зріз починається з початку рядка. Таким чином, s[:m]= s[0:m]:

>>> s = 'python'
>>> s[:4]
'pyth'
>>> s[0:4]
'pyth'

Аналогічно, якщо опустити другий індекс s[n:], зріз триває від першого індексу до кінця рядка. Це хороша, лаконічна альтернатива більш громіздкою s[n:len(s)]:

>>> s = 'python'
>>> s[2:]
'thon'
>>> s[2:len(s)]
'thon'

Для будь-якого рядка sі будь-якого цілого nчисла ( 0 ≤ n ≤ len(s)), s[:n] + s[n:]буде s:

>>> s = 'python'
>>> s[:4] + s[4:]
'python'
>>> s[:4] + s[4:] == s
True

Пропуск обох індексів повертає вихідний рядок. Це не копія, це посилання на вихідний рядок:

>>> s = 'python'
>>> t = s[:]
>>> id(s)
59598496
>>> id(t)
59598496
>>> s is t
True

Якщо перший індекс у зрізі більший або дорівнює другому індексу, Python повертає порожній рядок. Це ще один не очевидний спосіб згенерувати порожній рядок, якщо ви його шукали:

>>> s[2:2]
''
>>> s[4:2]
''

Негативні індекси можна використовувати і зі зрізами. Ось приклад коду Python:

>>> s = 'python'
>>> s[-5:-2]
'yth'
>>> s[1:4]
'yth'
>>> s[-5:-2] == s[1:4]
True

Крок для зрізу рядка

Існує ще один варіант синтаксису зрізу, про який варто згадати. Додавання додаткового :та третього індексу означає крок, який вказує, скільки символів слід пропустити після отримання кожного символу в зрізі.

Наприклад, для рядка 'python'зріз 0:6:2починається з першого символу і закінчується останнім символом (усім рядком), кожен другий символ пропускається. Це показано на наступній схемі:

Ілюстративний код показаний тут:

>>> s = 'foobar'
>>> s[0:6:2]
'foa'
>>> s[1:6:2]
'obr'

Як і у випадку з простим зрізом, перший та другий індекси можуть бути пропущені:

>>> s = '12345' * 5
>>> s
'1234512345123451234512345'
>>> s[::5]
'11111'
>>> s[4::5]
'55555'

Ви можете також вказати негативне значення кроку, в цьому випадку Python йде з кінця рядка. Початковий/перший індекс повинен бути більшим за кінцевий/другий індекс:

>>> s = 'python'
>>> s[5:0:-2]
'nhy'

У наведеному вище прикладі 5:0:-2означає «почати з останнього символу і робити два кроки назад, але не включаючи перший символ.»

Коли ви йдете назад, якщо перший та другий індекси пропущені, значення за замовчуванням застосовуються так: перший індекс – кінець рядка, а другий індекс – початок. Ось приклад:

>>> s = '12345' * 5
>>> s
'1234512345123451234512345'
>>> s[::-5]
'55555'

Це загальна парадигма для розвороту (reverse) рядка:

>>> s = 'Если так говорит товарищ Наполеон, значит, так оно и есть.'
>>> s[::-1]
'.ьтсе и оно кат ,тичанз ,ноелопаН щиравот тировог кат илсЕ'

Форматування рядка

У Python версії 3.6 було представлено новий спосіб форматування рядків. Ця функція офіційно названа літералом відформатованого рядка, але зазвичай згадується як f-string.

Можливості форматування рядків величезні і не будуть докладно описані тут. Однією простою особливістю f-рядків, які можна почати використовувати відразу, є інтерполяція змінної. Ви можете вказати ім'я змінної безпосередньо у f-рядковому літералі ( f'string'), і python замінить ім'я відповідним значенням.

Наприклад, припустимо, що потрібно відобразити результат арифметичного обчислення. Це можна зробити за допомогою простого print()та оператора ,, що розділяє числові значення та рядкові:

>>> n = 20
>>> m = 25
>>> prod = n * m
>>> print('Произведение', n, 'на', m, 'равно', prod)
Произведение 20 на 25 равно 500

Але це громіздко. Щоб виконати те саме за допомогою f-рядка:

  • Напишіть fабо Fперед лапками рядка. Це вкаже python, що це f-рядок замість стандартного.

  • Вкажіть будь-які змінні для відтворення у фігурних дужках ( {}).

Код з використанням f-string, наведений нижче, виглядає набагато чистіше:

>>> n = 20
>>> m = 25
>>> prod = n * m
>>> print(f'Произведение {n} на {m} равно {prod}')
Произведение 20 на 25 равно 500

Будь-який з трьох типів лапок у python можна використовувати для f-рядка:

>>> var = 'Гав'
>>> print(f'Собака говорит {var}!')
Собака говорит Гав!
>>> print(f"Собака говорит {var}!")
Собака говорит Гав!
>>> print(f'''Собака говорит {var}!''')
Собака говорит Гав!

Зміна рядків

Рядки - один з типів даних, які Python вважає незмінними, що означає неможливість їх змінювати. Як ви побачите нижче, python дає можливість змінювати (замінювати і перезаписувати) рядки.

Такий синтаксис приведе до помилки TypeError:

>>> s = 'python'
>>> s[3] = 't'
Traceback (most recent call last):
  File "", line 1, in <module>
    s[3] = 't'
TypeError: 'str' object does not support item assignment

Насправді немає особливої ​​потреби змінювати рядки. Зазвичай можна легко згенерувати копію вихідного рядка з необхідними змінами. Є мінімум два способи зробити це в python. Ось перший:

>>> s = s[:3] + 't' + s[4:]
>>> s
'pytton'

Є вбудований метод string.replace(x, y):

>>> s = 'python'
>>> s = s.replace('h', 't')
>>> s
'pytton'

Last updated