Как индексировать и вырезать строки в Python 3

Вступление

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

Из этого туториала вы узнаете, как получить доступ к строкам путем индексации, разбить их на последовательности символов, а также некоторые методы подсчета и определения местоположения символов.

Как индексируются строки

Подобноlist data type, у которого есть элементы, соответствующие порядковому номеру, каждый из символов строки также соответствует порядковому номеру, начиная с порядкового номера 0.

Для строкиSammy Shark! разбивка индекса выглядит так:

S a m m y S h a r k !

0

1

2

3

4

5

6

7

8

9

10

11

Как видите, первыйS начинается с индекса 0, а строка заканчивается с индексом 11 символом!.

Мы также заметили, что пробельный символ междуSammy иShark также соответствует своему собственному порядковому номеру. В этом случае индекс, связанный с пробелом, равен 5.

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

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

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

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

ss = "Sammy Shark!"
print(ss[4])
Outputy

Когда мы ссылаемся на определенный индексный номер строки, Python возвращает символ, который находится в этой позиции. Поскольку букваy находится под номером 4 индекса строкиss = "Sammy Shark!", когда мы печатаемss[4], мы получаемy в качестве вывода.

Индексные номера позволяют нам получить доступ к определенным символам в строке.

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

Если у нас есть длинная строка, и мы хотим точно определить элемент ближе к концу, мы также можем отсчитывать назад от конца строки, начиная с номера индекса-1.

Для той же строкиSammy Shark! разбивка отрицательного индекса выглядит так:

S a m m y S h a r k !

-12

-11

-10

-9

-8

-7

-6

-5

-4

-3

-2

-1

Используя отрицательные номера индексов, мы можем распечатать символr, указав его позицию по индексу -3, например:

print(ss[-3])
Outputr

Использование отрицательных индексных чисел может быть полезно для выделения одного символа в конце длинной строки.

Нарезка строк

Мы также можем вызвать диапазон символов из строки. Скажем, мы хотим просто вывести словоShark. Мы можем сделать это, создавslice, который представляет собой последовательность символов в исходной строке. С помощью срезов мы можем вызывать несколько символьных значений, создавая диапазон номеров индексов, разделенных двоеточием[x:y]:

print(ss[6:11])
OutputShark

При построении среза, как в[6:11], первый номер индекса - это место, где начинается срез (включительно), а второй номер индекса - это место, где срез заканчивается (исключая), поэтому в нашем примере выше диапазон имеет быть порядковым номером, который появится сразу после окончания строки.

При разрезании строк мы создаемsubstring, который по сути является строкой, существующей внутри другой строки. Когда мы вызываемss[6:11], мы вызываем подстрокуShark, которая существует в строкеSammy Shark!.

Если мы хотим включить любой конец строки, мы можем опустить одно из чисел в синтаксисеstring[n:n]. Например, если мы хотим напечатать первое слово строкиss - «Сэмми» - мы можем сделать это, набрав:

print(ss[:5])
OutputSammy

Мы сделали это, опустив индексный номер перед двоеточием в синтаксисе среза и включив в него только индексный номер после двоеточия, который относится к концу подстроки.

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

print(ss[7:])
Outputhark!

Включая только индексный номер перед двоеточием и оставляя второй индексный номер вне синтаксиса, подстрока будет идти от символа индексного номера, вызываемого до конца строки.

Вы также можете использовать отрицательные индексы, чтобы разрезать строку. Как мы уже говорили ранее, отрицательные индексы строки начинаются с -1 и отсчитываются оттуда до тех пор, пока мы не достигнем начала строки. При использовании отрицательных порядковых чисел мы начнем с меньшего числа, как это происходит раньше в строке.

Давайте используем два отрицательных индексных числа, чтобы разрезать строкуss:

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

Подстрока «ark» печатается из строки «Sammy Shark!», Потому что символ «a» находится в позиции номера индекса -4, а символ «k» - непосредственно перед позицией номера индекса -1.

Указание Stride при нарезке строк

Срезы строк могут принимать третий параметр в дополнение к двум индексным числам. Третий параметр указываетstride, который относится к тому, на сколько символов нужно продвинуться вперед после извлечения первого символа из строки. До сих пор мы опускали параметр шага, и Python по умолчанию равен шагу 1, так что каждый символ между двумя индексными числами извлекается.

Давайте снова посмотрим на пример выше, который печатает подстроку «Акула»:

print(ss[6:11])
OutputShark

Мы можем получить те же результаты, включив третий параметр с шагом 1:

print(ss[6:11:1])
OutputShark

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

Если вместо этого мы увеличим шаг, мы увидим, что символы пропущены:

print(ss[0:12:2])
OutputSmySak

При указании шага 2 в качестве последнего параметра в синтаксисе Pythonss[0:12:2] пропускаются все остальные символы. Давайте посмотрим на символы, которые напечатаны красным цветом:

Samm [.highlight]yShar [.highlight]k!

Обратите внимание, что символ пробела в индексе № 5 также пропускается с указанным шагом 2.

Если мы используем большее число для нашего параметра шага, у нас будет значительно меньшая подстрока:

print(ss[0:12:4])
OutputSya

Если указать шаг 4 в качестве последнего параметра в синтаксисе Pythonss[0:12:4], печатается только каждый четвертый символ. Опять же, давайте посмотрим на символы, которые напечатаны красным цветом:

Samm [.highlight]y Shark!

В этом примере символ пробела также пропускается.

Поскольку мы печатаем всю строку, мы можем опустить два индексных числа и оставить два двоеточия в синтаксисе для достижения того же результата:

print(ss[::4])
OutputSya

Если пропустить два индексных числа и сохранить двоеточия, вся строка останется в пределах диапазона, а при добавлении последнего параметра для шага будет указано количество пропускаемых символов.

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

print(ss[::-1])
Output!krahS ymmaS

Две двоеточия без указанного параметра будут включать все символы из исходной строки, шаг 1 будет включать в себя каждый символ без пропуска, а отрицание этого шага обратит порядок символов.

Давайте сделаем это снова, но с шагом -2:

print(ss[::-2])
Output!rh ma

В этом примереss[::-2] мы имеем дело со всей исходной строкой, поскольку в параметры не включены номера индексов, и меняем направление строки на отрицательный шаг. Кроме того, имея шаг -2, мы пропускаем каждую другую букву обратной строки:

!krahS[whitespace]ymmaS

Символ пробела печатается в этом примере.

Указывая третий параметр синтаксиса фрагмента Python, вы указываете шаг подстроки, которую вы извлекаете из исходной строки.

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

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

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

Выведем длину строкиss:

print(len(ss))
Output12

Длина строки «Sammy Shark!» Составляет 12 символов, включая пробел и символ восклицательного знака.

Вместо использования переменной мы также можем передать строку прямо в методlen():

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

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

Если мы хотим подсчитать, сколько раз в строке появляется один конкретный символ или последовательность символов, мы можем сделать это с помощью методаstr.count(). Давайте поработаем со строкойss = "Sammy Shark!" и посчитаем, сколько раз встречается символ «a»:

print(ss.count("a"))
Output2

Мы можем искать другого персонажа:

print(ss.count("s"))
Output0

Хотя буква «S» находится в строке, важно помнить, что каждый символ чувствителен к регистру. Если мы хотим найти все буквы в строке независимо от регистра, мы можем использовать методstr.lower(), чтобы сначала преобразовать строку во все строчные буквы. Вы можете прочитать больше об этом методе в «https://www.digitalocean.com/community/tutorials/an-introduction-to-string-methods-in-python-3#making-strings-upper-and-lower-case [Введение в строковые методы в Python 3]. »

Давайте попробуемstr.count() с последовательностью символов:

likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
Output3

В строкеlikes последовательность символов, эквивалентная «лайкам», встречается 3 раза в исходной строке.

Мы также можем найти, в какой позиции символ или последовательность символов встречаются в строке. Мы можем сделать это с помощью методаstr.find(), который вернет позицию символа на основе номера индекса.

Мы можем проверить, где встречается первая буква «m» в строкеss:

print(ss.find("m"))
Ouput2

Первый символ «m» встречается в позиции индекса 2 в строке «Sammy Shark!» Мы можем просмотреть позиции порядкового номера строкиssabove.

Давайте проверим, где в строкеlikes встречается первая последовательность символов «Нравится»:

print(likes.find("likes"))
Ouput6

Первый экземпляр последовательности символов «нравится» начинается с позиции индекса 6, где располагается символl последовательностиlikes.

Что если мы хотим увидеть, где начинается вторая последовательность «лайков»? Мы можем сделать это, передав второй параметр методуstr.find(), который начнется с определенного номера индекса. Итак, вместо того, чтобы начинать с начала строки, давайте начнем с номера индекса 9:

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

Во втором примере, который начинается с номера индекса 9, первое вхождение последовательности символов «лайки» начинается с номера 34 индекса.

Кроме того, мы можем указать конец диапазона в качестве третьего параметра. Как и нарезка, мы можем сделать это путем обратного отсчета с использованием отрицательного индекса:

print(likes.find("likes", 40, -6))
Output64

В этом последнем примере выполняется поиск позиции последовательности «лайки» между номерами индексов от 40 до -6. Поскольку последний введенный параметр является отрицательным числом, он будет отсчитываться от конца исходной строки.

Строковые методыlen(),str.count() иstr.find() могут использоваться для определения длины, количества символов или последовательностей символов, а также позиций индекса символов или последовательностей символов в строках.

Заключение

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

Вы можете узнать больше оformatting strings иstring methods, чтобы продолжить изучение строк.