Индексация и срез строк в Python 3

Строки – это тип данных Python, который представляет собой последовательность из одного или нескольких символов (букв, цифр, пробелов и других символов). Поскольку строки являются последовательностями, с ними можно взаимодействовать так же, как и с другими типами данных на основе последовательности – путём индексации и среза.

Данное руководство научит вас индексировать строки, создавать срезы и использовать некоторые методы подсчёта и поиска символов.

Индексация строк

Каждому символу в строке соответствует индексный номер, начиная с 0. К примеру, строка 8host Blog! индексируется следующим образом:

8 h o s t B l o g !
0 1 2 3 4 5 6 7 8 9 10

 

Как видите, индексом первого символа является 0, последний индекс, 10, принадлежит символу «!».Любой другой символ или знак препинания (*#$&.;?,) также будет иметь свой собственный номер индекса.

Следует обратить внимание на то, что пробел также является частью строки, потому тоже имеет свой индекс (в данном случае 5).

Принимая во внимание тот факт, что каждый символ в строке Python имеет соответствующий индекс, вы можете управлять строками так же, как и любыми другими последовательными типами данных.

Поиск символа по положительному индексу

Ссылаясь на индекс, вы можете извлечь один символ из строки. Для этого индекс помещается в квадратные скобки. Объявите строку и попробуйте извлечь один из её символов.

ss = "8host Blog!"
print(ss[4])
t

Когда вы ссылаетесь на конкретный индекс, Python возвращает символ, которому этот индекс принадлежит. Символ t в строке 8host Blog! имеет индекс 4.

Выбор символа по отрицательному индексу

К примеру, у вас есть очень длинная строка. Чтобы точно определить её конец, можно начать счёт в обратном порядке, начиная с конца строки и индекса -1.

К примеру, строка 8host Blog!будет иметь следующий негативный индекс:

8 h o s t B l o g !
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

Запросите символ с отрицательным индексом -9:

print(ss[-9])
o

Отрицательный индекс позволяет выбрать символ в длинной строке.

Срез строк

Также вы можете вызвать диапазон символов из строки. К примеру, вывести только Blog. Для этого используется оператор нарезки, а получившийся в результате фрагмент данных называется срезом. Чтобы создать срез, введите диапазон индексов в квадратные скобки, разделив их двоеточием:

print(ss[6:10])
Blog

Как можно понять из примера, 6 – индекс первого символа среза (включительно), а 10 – индекс символа после среза (по сути, в срез входят символы с индексами 6, 7, 8 и 9; восклицательный знак с индексом 10 уже не входит в срез).

Выполняя нарезку строки, вы создаёте новую строку, точнее, подстроку – строку, которая существует внутри другой строки (к примеру, строка Blog существует внутри строки 8host Blog!).

Чтобы включить в срез начало или конец строки, можно опустить индекс первого или последнего её символа. К примеру, чтобы вывести только 8host (первое слово строки), можно ввести:

print(ss[:5])
8host

Как видите, индекс первого символа не указан.

Чтобы вывести подстроку, начиная с середины строки и до конца, можно ввести:

print(ss[7:])
log!

Также в срезе можно использовать отрицательный индекс. Как говорилось в предыдущем разделе, отрицательная индексация начинается с -1 с конца строки, обратный отсчёт продолжается до первого символа строки.

Попробуйте запросить срез с помощью отрицательного индекса:

print(ss[-4:-1])
log

Срезы с шагом

В предыдущем разделе срез был взят по такому шаблону:

string[start:stop]

включая индекс start и не включая индекс stop. Однако срезы можно задавать по трём параметрам:

string[start:stop:stride]

где stride – шаг. Этот параметр указывает, на сколько символов нужно продвинуться после взятия первого символа. По умолчанию шаг в Python равен 1, то есть, Python будет извлекать символы по порядку.

Шаг со стандартным значением 1 можно не указывать – это не повлияет на поведение Python. Например:

print(ss[6:10])
Blog
print(ss[6:10:1])
Blog

Стандартный шаг будет выводить каждый индекс. Попробуйте задать нестандартное значение шага:

print(ss[0:11:2])
8otBo!

Если шаг – 2, Python пропустить каждый второй символ и выведет символы исходной строки через один (выведенные символы выделены красным):

8host Blog!

Обратите внимание: пробел с индексом 5 также был пропущен, поскольку он является отдельным символом в последовательности.

Попробуйте увеличить шаг:

print(ss[0:11:4])
8to

Такой шаг выведет каждый четвертый символ после первого символа строки.

8host Blog!

Запрашивая всю строку, вы можете не указывать первые два параметра (start и stop), так как при этом Python по умолчанию выводит строку от начала до конца.

print(ss[::4])
8to

Также вы можете использовать отрицательные индексы. Шаг -1 выведет символы строки в обратном порядке:

print(ss[::-1])
!golB tsoh8

Первые два параметра пропущены, потому Python выведет все символы строки.

Попробуйте запросить всю строку с шагом -2:

print(ss[::-2])
!oBto8

При этом символы строки будут выведены в обратном порядке через один:

!golB tsoh8

Методы подсчета

Методы подсчета позволяют ограничить количество символов в формах пользовательского ввода и сравнивать строки. Как и для других последовательных типов данных, для работы со строками существует несколько методов.

Метод len() выводит длину любого последовательного типа данных (включая строки, списки, кортежи и словари).

Запросите длину строки ss:

print(len(ss))
11

Строка «8host Blog!» содержит 11 символов.

Кроме переменных, метод len() может подсчитать длину любой заданной строки, например:

print(len("Let's print the length of this string."))
38

Метод len() подсчитывает общее количество символов в строке.

Метод str.count()может подсчитать, сколько раз в строке повторяется тот или иной символ. Запросите количество символов о в строке «8host Blog!».

print(ss.count("о"))
2

Запросите другой символ:

print(ss.count("b"))
0

Несмотря на то, что символ b присутствует в запрашиваемой строке, метод возвращает 0, поскольку он чувствителен к регистру. Чтобы вывести символы по нижнему регистру,  используйте метод str.lower().

Читайте также: Методы строк в Python 3

Используйте метод str.count() на последовательность символов:

likes = "Mary likes to swim in the ocean, and likes to smile."
print(likes.count("likes"))
2

Подстрока likes встречается в вышеприведённой строке дважды.

Чтобы определить индекс символа в строке, используйте метод str.find().

Для примера запросите индекс символа o в строке ss:

print(ss.find("о"))
2

Первый символ о в строке «8host Blog!» находится под индексом 2.

Попробуйте узнать индекс первого символа подстроки «likes» внутри строки likes:

print(likes.find("likes"))
5

Но в данной строке последовательность likes встречается дважды. Как узнать индекс первого символа второй последовательности likes? Методу str.find() можно задать второй параметр – индекс, с которого нужно начинать поиск.

print(likes.find("likes", 9))
37

Заключение

Теперь вы обладаете базовыми навыками работы со строками, умеете индексировать их и создавать срезы.

Читайте также:

Tags: ,

2 комментария

Добавить комментарий