Строки. Доступ по индексам. Срезы. Получение фрагмента строки. Примеры
Содержание
- 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'
⇑
Связанные темы
- Строки. Общие понятия. Объявление строки. Операции над строками. Примеры
- Экранированные последовательности. Неформатированные строки. Многострочные блоки текста
⇑