Теоретичні відомості#
Рядок представляє послідовність символів у кодуванні 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. Що стосується форматування рядків, то рекомендується подивитися матеріал за посиланнями: