Основы работы со строками¶
Строковый литерал может быть записан в одинарных или двойных кавычнах:
Разницы между этими двумя формами записи нет. Записывать строки в двойных кавычках удобно в случаях, когда в тексте содержится апостроф:
Запись в апострофах удобна, если в тексте есть кавычки:
Иначе интерпретатор будет считать ближайшие кавычку или апостроф закрывающими, и их нужно экранировать:
Внутри строки могут быть управляющие последовательности. Некоторые из них:
В некоторых случаях экранирование обратного слеша может быть неудобно. Можно воспользоваться литералом сырых строк:
Операции со строками¶
Получение длины строки:
Повторение строки n раз:
Обращение к символу i строки s . Индексация начинается с нуля. Индексы могут быть отрицательными, тогда отсчет ведется с конца строки:
Получение среза строки от позиции begin до позиции end с шагом step . Любой параметр может быть пропущен:
Задачи¶
Пользователь вводит слово. Подсчитать количество символов в нем.
Пользователь вводит слово. Вывести его первую и последнюю буквы.
Пользователь вводит число. Вывести соответствующее количество кроликов. Пример:
Дана строка, содержащая путь к файлу:
С помощью срезов вывести отдельно имя файла, его расширение, имя каталога и полный путь к каталогу. Пример вывода:
Дана строка 12’345’678 . Используя срезы и преобразование типов получить из нее число.
Пользователь вводит названия трех глав книги и номера их страниц. Вывести получившиееся содержание так, чтобы названия глав были выровнены по левому краю, а номера страниц — по правому. Ширину страницы принять за 50 символов.
Дополнительные задачи¶
Разработать приложение, которое запрашивает у пользователя стоимость заказа из трех пунктов и выводит чек таким образом, что все стоимости выводятся в крайнем правом столбце. Ширину чека принять за 30 символов. Пример:
Самоучитель
У строк в Python есть множество полезных методов для того, чтобы дать возможность делать со строками различные полезные и нужные действия.
Методы похожи на функции, их тоже можно вызывать и, так же как и функции, они могут возвращать результат своей работы. Отличие же методов в том, что они привязаны к определенному типу данных и, например, методы строк могут быть вызваны только у строк.
Все методы строк можно посмотреть в нашем справочнике, а вот несколько примеров того, как вызывать методы строк.
Начинающему программисту важно помнить, что методы не меняют исходную строку. Строки в Python вообще нельзя изменить. Если вы хотите поменять все ее символы, например, на символы нижнего регистра, нужно присвоить строке новое значение
Индексы строк
Бывает так, что иногда появляется необходимость выбирать отдельные символы из строки. В Python для этого необходимо использовать квадратные скобки. В таблице ниже приведены примеры получения символа строки по индексу строки Python, помещенной в переменную string.
| Код | Результат | Описание |
|---|---|---|
| s[0] | P | Первый символ |
| s[1] | y | Второй символ |
| s[-1] | n | Последний символ |
| s[-2] | o | Предпоследний символ |
Как вы видите, необходимо учитывать, что номером индекса первого символа будет [0] Отрицательный индекс будет отсчитывать символы с конца строки. Распространенная ошибка: предположим, что мы пытаемся задать индекс s[12]. Но в примере выше мы имеем всего шесть элементов строки, и логично что Python выдаст ошибку следующего содержания:
Срезы строк
Срез используется для выделения части строки. Он состоит из индекса и диапазона. Ниже расположены несколько примеров со строкой
| Фрагмент кода | Результат | Описание |
|---|---|---|
| string[ 2 : 5 ] | вгд | Символы с индексом 2, 3, 4 |
| string[ : 5 ] | абвгд | Первые пять символов |
| string[ 5 : ] | ежзик | Символы, начиная с индекса 5 и до конца |
| string[ −2 : ] | ик | Последние два символа |
| string[ : ] | абвгдежзик | Вся строка |
| string[1 : 7 : 2] | бге | Со второго по шестой символы, через один |
| string[ : : −1 ] | кизжедгвба | Обратный шаг, строка наоборот |
Базовая структура среза выглядит следующим образом: Строка[начальный_символ : конечный_символ + 1]
Срезы не включают явное расположение окончания строки. Например, в приведенном выше примере string[2 : 5], Python выведет символы с индексами 2, 3 и 4, но не символ с индексом 5.
Мы можем оставить, вместо индекса начала или окончания строки, пустоту. Пустота на месте индекса начала будет по умолчанию равна нулю. Итак, string[: 5] выведет первые пять символов строки string. А в случае string[5 :], Python покажет символы, начиная с индекса 5 и до конца строки. Если же использовать отрицательные индексы, мы получим символы с конца строки. Например, string[-2 :] — это последние два символа.
Также существует необязательный третий аргумент, который указывает на шаг среза строки. Например, string[1 : 7 : 2] берет каждый второй символ из строки с индексом 1, 3 и 5.
Python: Извлечение символов из строки
Иногда нужно получить один символ из строки. Например, если сайт знает имя и фамилию пользователя, и в какой-то момент требуется вывести эту информацию в формате A. Ivanov. Для этого компьютеру потребуется взять первый символ из имени. В Python есть подходящая операция, которую мы изучим сегодня.
Представим, что из имени Alexander нужно вывести на экран только первую букву. Это выглядит так:
Операция с квадратными скобками с цифрой извлекает элемент по индексу — позицией символа внутри строки. Индексы начинаются с 0 почти во всех языках программирования. Поэтому, чтобы получить первый символ, нужно указать индекс 0 . Индекс последнего элемента равен длине строки минус единица. Обращение к индексу за пределами строки приведет к ошибке:
Чтобы лучше закрепить новые знания, посмотрите на код ниже и подумайте, что он выдаст:
Бывают и нестандартные ситуации. Например, нужно вывести элемент из конца, причем из выражения с большим количеством символов. В этом случае можно воспользоваться отрицательным индексом, который облегчит работу программиста.
Допустимо использовать отрицательные индексы. В этом случае идет обращение к символам, начиная с конца строки. -1 — индекс последнего символа, -2 — предпоследнего и так далее. В отличие от прямой индексации, обратный отсчет идет от -1 :
Индексом может быть не только конкретное число, но и значение переменной. Посмотрите на пример ниже. Здесь мы записали индекс внутри квадратных скобок не числом, а переменной. Такой код приведет к тому же результату — выводу на экран символа A:
Чтобы выводить из выражения лишь некоторые символы, не нужно писать большое количество строк кода — достаточно извлечь элемент с помощью индекса. Также можно пользоваться отрицательным индексом, чтобы легче выводить символы с конца выражения. Далее разберемся, как с помощью этих знаний можно извлекать подстроки из строки.
Задание
Выведите на экран последний символ строки, находящейся в переменной name
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Python. Строки. Доступ по индексам. Срезы. Получение фрагмента строки. Примеры
Строки. Доступ по индексам. Срезы. Получение фрагмента строки. Примеры
Содержание
- 1. Способы получения фрагментов строк
- 2. Операция индексирования. Получение символа с начала и из конца строки
- 3. Что такое срез? Виды срезов при работе со строками
- 4. Операция вытягивания подстроки с двумя границами [:] . Способы получения подстроки. Примеры
- 4.1. Форма вида S[i : j]
- 4.2. Форма вида S[ : j]
- 4.3. Форма вида S[i : ]
- 4.4. Форма вида S[ : ]
- 5.1. Форма вида [ i : j : k ]
- 5.2. Форма вида [i : : k]
- 5.3. Форма вида [ : j : k]
- 5.4. Форма вида [ : : k]
- 5.5. Форма вида [ : : ]
Поиск на других ресурсах:
1. Способы получения фрагментов строк
В Python фрагменты строк можно получать одним из трех способов:
- операцией индексирования. Этим способом получается один символ строки;
- операцией присваивания среза строки. Этим способом можно получить как отдельный символ, так и фрагмент строки;
- с помощью функций стандартной библиотеки Python.
2. Операция индексирования. Получение символа с начала и из конца строки
В языке Python с помощью операции индексирования можно получить конкретный символ строки. В общем виде операция индексирования выглядит следующим образом
здесь index – позиция символа, который нужно прочесть из строки.
Если значение index ≥0 (положительное значение), то обработка строки осуществляется из ее начала. При положительной индексации первый элемент строки имеет смещение 0.
Если значение index <0 (отрицательное значение), то строка обрабатывается из конца. При отрицательной индексации первый из конца элемент имеет смещение -1.На рисунке 1 изображен пример нумерования индексов для некоторой строки S .
Рисунок 1. Положительная и отрицательная индексация
На примере, изображенном на рисунке, к символу b можно обратиться одним из двух способов:
Пример.
Результат работы программы
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[ : ]
Такая форма вытягивает элементы строки начиная от начала строки и до конца строки. Таким способом можно получить поверхностную копию строки, которая содержит то же значение но размещенное в другой области памяти.
Пример.
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 изменяется на противоположный.
Пример.
5.2. Форма вида [i : : k]
При данной форме средняя граница опущена. Если k >=0, то строка обрабатывается с позиции i до конца строки. Если k <0, то строка обрабатывается с позиции i до начала строки в обратном порядке.
Пример.
5.3. Форма вида [ : j : k]
При такой форме отсутствует первая граница i . Если значение k >=0, то i принимается равным началу строки ( i =0). Если значение k <0, то строка рассматривается от конца до начала, а значение i принимается равным концу строки.
Пример.
5.4. Форма вида [ : : k]
Данная форма не содержит крайних границ строки i , j . Это значит, что значения i , j по умолчанию указывают на крайние символы обрабатываемой строки.
Если значение k >=0, то строка рассматривается от начала до конца. В этом случае i равно индексу первой позиции строки ( i =0), а значение j -1 равно индексу последнего символа строки.Если значение k <0, то строка рассматривается от конца до начала. В этом случае значение i принимается равным индексу последнего символа строки. Значение j принимается равным индексу первого символа строки.
Пример.
5.5. Форма вида [ : : ]
При такой форме строка-оригинал копируется в другую строку полностью без перемен.
Пример.
6. Операция slice() . Получение объекта среза. Примеры
В Python реализована отдельная операция slice , которая позволяет получить объект среза. Общая форма операции следующая: