Теоретичні відомості#

Рядок представляє послідовність символів у кодуванні Unicode. До окремих символів рядка можна звернутися за індексом в квадратних дужках:

string = "hello world"
c0 = string[0]  #h
print(c0)
h
c6 = string[6]  # w
print(c6)
w
c11 = string[11] # помилка IndexError: string index out of range
print(c11)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-a03a61ba36bc> in <module>
----> 1 c11 = string[11] # помилка IndexError: string index out of range
      2 print(c11)

IndexError: string index out of range

Індексація починається з нуля, тому перший символ рядка буде мати індекс \(0\). А якщо спробувати звернутися до індексу, якого немає в рядку, то виникає помилка − виключення IndexError. Наприклад, в випадку вище довжина рядка \(11\) символів, тому її символи матимуть індекси від \(0\) до \(10\). Щоб отримати доступ до символів, починаючи з кінця рядка, можна використовувати від’ємні індекси. Так, індекс -1 представлятиме останній символ, а -2 — передостанній символ і так далі.

При роботі з рядками треба враховувати те, що в Python, на відміну від інших мов програмування, рядки незмінні, тобто змінити символи в рядку в принципі не можна. Тому є два альтернативних варіанти:

  • сформувати новий змінений рядок

  • замінити певні символи або слова (в залежності від задачі) при виведенні їх на екран.

Сформувати новий рядок також можна двома способами (як мінімум):

  • перетворити вихідний в список, виконати в ньому заміну, а потім елементи списку з’єднати в новий рядок;

  • використовувати механізм зрізів, без використання нового рядка.

Спроба простим присвоєнням змінити символ у певній позиції або підрядок викличе помилку. Але можна зробити так:

word = 'strength'
word = word[:3] + '!' + word[4:]
print(word)
# 'str!ngth'  результат заміни символа
str!ngth

або так:

word = word.replace('!','e')
print(word)
# 'strength'   результат заміни символа
strength

Отримання підрядка#

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

string[:end]: вилучається послідовність символів, починаючи з \(0\)-го індексу по індекс end

string[start: end]: вилучається послідовність символів, починаючи з індексу start по індекс end

string[start: end: step]: вилучається послідовність символів, починаючи з індексу start по індекс end через крок step

Усі варіанти отримання підрядка:#

string = "hello world"
# з 0 до 5 символа
sub_string1 = string[:5]
print(sub_string1)  #hello
hello
# з 2 до 5 символа
sub_string2 = string[2:5]
print(sub_string2)  #llo
llo
# з 2 по 9 символ через один символ
sub_string3 = string[2:9:2]
print(sub_string3)  #lowr
lowr

Функції ord і len#

Оскільки рядок містить символи \(Unicode\), то за допомогою функції ord() можна отримати числове значення для символа в кодуванні \(Unicode\):

print(ord("A")) # 65
65

Для отримання довжини рядка можна використовувати функцію len():

string = "hello world"
length = len(string)
print(length) # 11
11

Пошук у рядку#

За допомогою виразу \(term\) in \(string\) можна знайти підрядок \(term\) у рядку \(string\). Якщо підрядок знайдений, то вираз поверне значення True, інакше повертається значення False:

string = "hello world"
exist = "hello" in string
print(exist) # True
True
exist = "sword" in string
print(exist) # False
False

Перебір рядка#

За допомогою циклу for можна перебрати всі символи рядка:

string = "hello world"
for char in string:
    print(char)
h
e
l
l
o
 
w
o
r
l
d

Базові операції з рядками#

Конкатенація (додавання)#

s1 = 'spam'
s2 = 'eggs'
print(s1 + s2)
spameggs

Дублювання рядка#

print('spam' * 3)
spamspamspam

Довжина рядка#

len('spam')
4

Доступ за індексом#

S = 'spam'
S[0]
's'
S[2]
'a'
S[-2]
'a'

Зріз#

s = 'spameggs'
s[3:5]
'me'
s[2:-2]
'ameg'
s[:6]
'spameg'
s[1:]
'pameggs'
s[:]
'spameggs'

Крок вилучення зрізу#

s[::-1]
'sggemaps'
s[3:5:-1]
''
s[2::2]
'aeg'

Повний перелік функцій і методів роботи з рядками представлений у Додатку 5. Більш докладно з принципами роботи з рядками можна ознайомитися із [1], стр. 56-69. Що стосується форматування рядків, то рекомендується подивитися матеріал за посиланнями: