Python. Рядки. Доступ за індексами. Зрізи. Отримання фрагменту рядка. Приклад

Рядки. Доступ за індексами. Зрізи. Отримання фрагменту рядка. Приклади


Зміст


1. Способи отримання фрагментів рядків

У Python фрагменти рядків можна отримувати одним з трьох способів:

  • операцією індексування. Цим способом отримується один символ рядка;
  • операцією присвоювання зрізу рядка. Цим способом можна отримати як окремий символ, так і фрагмент рядка;
  • з допомогою функцій стандартної бібліотеки Python.

 

2. Операція індексування. Отримання символу з початку та з кінця рядка

У мові Python з допомогою операції індексування можна отримати конкретний символ рядка. В загальному вигляді операція індексування виглядає наступним чином

[index]

тут index – позиція символу, який потрібно прочитати з рядка.

Якщо знечення index≥0 (додатнє значення), то обробка рядка проводиться з його початку. При додатній індексації перший елемент рядка має зміщення 0.
Якщо значення index<0 (від’ємне значення), то рядок обробляється з кінця. При від’ємній індексації перший з кінця елемент має зміщення -1.

На рисунку 1 зображено приклад нумерування індексів для деякого рядка S.

Python. Рядки. Додатня та від’ємна індексація

Рисунок 1. Додатня та від’ємна індексація

На прикладі, зображеному на рисунку, до символу b можна звернутись одним з двох способів:

c1 = S[1] # додатня індексація, c1 = 'b'
c2 = S[-5] # від’ємна індексація, c2 = 'b'

Приклад.

# Рядки
# Додатнє та від'ємне індексування

# Заданий рядок
s = "Hello world"

# Отримати символ з початку рядка
c_begin = s[3] # c_begin = l
print('c_begin = ', c_begin)

# Отримати символ з кінця рядка
c_end = s[-3] # c_end = r
print('c_end = ', c_end)

Результат роботи програми

c_begin = l
c_end = r

 

3. Що таке зріз? Види зрізів при роботі з рядками

Зріз – це є форма синтаксичного аналізу, яка дозволяє витягувати фрагменти рядків (підрядки) за одну дію. Використання зрізів дозволяє отримувати підрядки зручним способом.

Розрізняють два види операцій присвоювання зрізу рядка:

  • зрізи виду [:]. У цьому випадку вказуються дві межі, розділені символом : (двокрапка);
  • розширений зріз [::]. У цьому випадку вказуються три межі, розділені символом : (двокрапка).

 

4. Операція витягування підрядка з двома межами [:]. Способи отримання підрядка. Приклади

При роботі з рядками можна виділити такі форми присвоювання зрізів, в яких задаються дві межі:

  • [i : j] – обидві межі i, j задані явно;
  • [ : j] – перша межа відсутня;
  • [i : ] – друга межа відсутня;
  • [ : ] – обидві межі відсутні.


 

4.1. Форма виду S[i : j]

У цьому випадку з рядка S витягується підрядок з позиції i до позиції j-1 включно. На рисунку 2 показано приклад операції витягування підрядків.

Python. Рядки. Зрізи. Способи витягування підрядків з рядка

Рисунок 2. Витягування підрядків S2, S3, S4 з рядка S. Витягуються символи, що лежать на позиціях 2, 3, 4

 

4.2. Форма виду S[ : j]

При такій формі перший індекс не вказується. Це означає, що витягується підрядок з початку рядка (додатнє зміщення 0) до позиції j-1.

На рисунку 3 зображено приклад даної форми зрізу.

Python. Рядки. Зрізи. Витягування підрядків з рядка

Рисунок 3. Витягування підрядків з рядка S

 

4.3. Форма виду S[i : ]

При такій формі другий індекс відсутній. Дана форма витягує елементи рядка починаючи з позиції i та до кінця рядка. На рисунку 4 зображено приклад даної форми зрізу.

Python. Рядки. Зрізи. Витягування підрядків з рядка

Рисунок 4. Витягування підрядків з рядка

 

4.4. Форма виду S[:]

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

Приклад.

# Присвоювання зрізу виду [:]
S = 'abcdef'
S2 = S[:] # S2 = 'abcdef' - розміщений в іншій області пам'яті

 

5. Розширена операція витягування підрядка [ : : ]. Способи отримання підрядка. Приклади

Розширена операція витягування підрядка [i:j:k] (зріз) має три межі. Третя межа k визначає крок за індексом. Величина кроку k додається до позиції кожного елементу, який витягується з рядка. Величина k є необов’язковою. За замовчуванням значення k=1.

Стосовно значення k є наступні особливості:

  • якщо величина k≥0, то рядок розглядається з початку до кінця (зліва направо);
  • якщо величина k<0, то рядок розглядається з кінця до початку (справа наліво).

Розрізняють наступні розширені форми витягування підрядка:

  • [i : j : k] – явно задані межі i, j та крок індексу k;
  • [i : : k] – відсутня друга межа j;
  • [ : j : k] – відсутня перша межа i;
  • [ : : k] – відсутні обидві межі i, j;
  • [ : : ] – відсутні обидві межі i, j а також відсутній крок індексу k.

 

5.1. Форма виду [i : j : k]

При такій формі витягуються всі елементи рядка починаючи з позиції i, завершуючи позицією j-1 включно зі зміщенням (кроком) k. Якщо k<0, то порядок меж i, j змінюється на протилежний.

Приклад.

# Розширена форма присвоювання зрізу [i:j:k]
S = '0123456789'

# значення k>=0
S2 = S[1:8:2] # S2 = '1357'
S3 = S[0:8:3] # S3 = '036'

# значення k<0
S4 = S[9:0:-2] # S4 = '97531'
S5 = S[9:0:-1] # S5 = '987654321'

 

5.2. Форма виду [i : : k]

При даній формі середня межа пропускається. Якщо k>=0, то рядок обробляється з позиції i до кінця рядка. Якщо k<0, то рядок обробляється з позиції i до початку рядка у зворотному порядку.

Приклад.

# Розширена форма присвоювання зрізу [i::k]
S = 'abcdefghijklmno'

# значення k>=0
S2 = S[1::2] # S2 = 'bdfhjln'
S3 = S[5::3] # S3 = 'filo'

# значення k<0
# рядок у зворотному порядку через символ
S4 = S[len(S)::-2] # S4 = 'omkigeca'

# рядок у зворотному порядку
S5 = S[len(S)::-1] # S5 = 'onmlkjihgfedcba'

 

5.3. Форма виду [ : j : k]

При такій формі відсутня перша межа i. Якщо значення k>=0, то i приймається рівним початку рядка (i=0). Якщо значення k<0, то рядок розглядається з кінця до початку, а значення i приймається рівним кінцю рядка.

Приклад.

# Розширена форма присвоювання зрізу [:j:k]
S = 'abcdefghijklmno'

# значення k>=0
S2 = S[:len(S):2] # S2 = 'acegikmo'
S3 = S[:10:3] # S3 = 'adgj'

# значення k<0
# рядок у зворотному порядку через символ
S4 = S[:0:-2] # S4 = 'omkigec'

# рядок у зворотному порядку без першого символа
S5 = S[:0:-1] # S5 = 'onmlkjihgfedcb'

# рядок у зворотному порядку з першим символом
S6 = S[:-len(S)-1:-1] # S6 = 'onmlkjihgfedcba'

 

5.4. Форма виду [ : : k]

Дана форма не містить крайніх меж рядка i, j. Це означає, що значення i, j за замовчуванням вказують на крайні символи рядка, який обробляється.

Якщо значення k>=0, то рядок розглядається з початку до кінця. У цьому випадку i рівне індексу першої позиції рядка (i=0), а значення j-1 рівне індексу останнього символу рядка.

Якщо значення k<0, то рядок розглядається з кінця до початку. У цьому випадку значення i приймаєтсья рівним індексу останнього символу рядка. Значення j приймається рівним індексу першого символу рядка.

Приклад.

# Розширена форма присвоювання зрізу [::k]
S = 'abcdefghijklmno'

# значення k>=0
S2 = S[::2] # S2 = 'acegikmo'
S3 = S[::3] # S3 = 'adgjm'

# значення k<0
# рядок у зворотному порядку через символ
S4 = S[::-2] # S4 = 'omkigeca'

# рядок у зворотному порядку
S5 = S[::-1] # S5 = 'onmlkjihgfedcba'

 

5.5. Форма виду [ : : ]

При такій формі рядок-оригінал копіюється в інший рядок повністю без змін.

Приклад.

# Розширена форма присвоювання зрізу [::]
S = 'abcdefghijklmno'
S2 = S[::] # S2 = 'abcdefghijklmno'

 

6. Операція slice(). Отримання об’єкту зрізу. Приклади

У Python реалізована окрема операція slice, яка дозволяє отримати об’єкт зрізу. Загальна форма операції наступна:

slice(i, j, k)

де

  • i, j – відповідно нижня та верхня межа зрізу. Якщо межа відсутня, то замість неї вказується службове слово None;
  • k – крок за індексом.

Приклад.

# Отримання об'єкту зрізу
# Операція slice
S = 'abcdefgh'
S2 = S[slice(2,5)] # S2 = 'cde' - створюється об'єкт зрізу
S3 = '0123456789'[slice(3,8)] # S3 = '34567'

S4 = S[slice(5, None, -1)] # S4 = 'fedcba' - об'єкт розширеного зрізу
S5 = S[slice(None, None, 2)] # S5 = 'aceg'
S6 = 'Hello'[slice(None, None, -1)] # S6 = 'olleH'

 


Зв’язані теми