Рядки. Доступ за індексами. Зрізи. Отримання фрагменту рядка. Приклади
Зміст
- 1. Способи отримання фрагментів рядків
- 2. Операція індексування. Отримання символу з початку та з кінця рядка
- 3. Що таке зріз? Види зрізів при роботі з рядками
- 4. Операція витягування підрядка з двома межами [:]. Способи отримання підрядка. Приклади
- 5. Розширена операція витягування підрядка [::]. Способи отримання підрядка. Приклади
- 6. Операція slice(). Отримання об’єкту зрізу. Приклади
- Зв’язані теми
Пошук на інших ресурсах:
1. Способи отримання фрагментів рядків
У Python фрагменти рядків можна отримувати одним з трьох способів:
- операцією індексування. Цим способом отримується один символ рядка;
- операцією присвоювання зрізу рядка. Цим способом можна отримати як окремий символ, так і фрагмент рядка;
- з допомогою функцій стандартної бібліотеки Python.
⇑
2. Операція індексування. Отримання символу з початку та з кінця рядка
У мові Python з допомогою операції індексування можна отримати конкретний символ рядка. В загальному вигляді операція індексування виглядає наступним чином
[index]
тут index – позиція символу, який потрібно прочитати з рядка.
Якщо знечення index≥0 (додатнє значення), то обробка рядка проводиться з його початку. При додатній індексації перший елемент рядка має зміщення 0.
Якщо значення index<0 (від’ємне значення), то рядок обробляється з кінця. При від’ємній індексації перший з кінця елемент має зміщення -1.
На рисунку 1 зображено приклад нумерування індексів для деякого рядка S.
Рисунок 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 показано приклад операції витягування підрядків.
Рисунок 2. Витягування підрядків S2, S3, S4 з рядка S. Витягуються символи, що лежать на позиціях 2, 3, 4
⇑
4.2. Форма виду S[ : j]
При такій формі перший індекс не вказується. Це означає, що витягується підрядок з початку рядка (додатнє зміщення 0) до позиції j-1.
На рисунку 3 зображено приклад даної форми зрізу.
Рисунок 3. Витягування підрядків з рядка S
⇑
4.3. Форма виду S[i : ]
При такій формі другий індекс відсутній. Дана форма витягує елементи рядка починаючи з позиції i та до кінця рядка. На рисунку 4 зображено приклад даної форми зрізу.
Рисунок 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'
⇑
Зв’язані теми
- Рядки. Загальні поняття. Оголошення рядка. Операції над рядками. Приклади
- Екрановані послідовності. Неформатовані рядки. Багаторядкові блоки тексту
⇑