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'

 


Связанные темы