Срезы строк [ Python 3 ]
Иногда нужно бывает работать с целыми частями строки, в таком случае мы используем срезы (slices). Срезы похожи на комбинацию индексации и функции range() .
Рассмотрим строку s = ‘abcdefghij’ .
Положительные индексы | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
Строка | a | b | c | d | e | f | g | h | i | j |
Отрицательные индексы | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
С помощью среза мы можем получить несколько символов исходной строки, создав диапазон индексов разделенных двоеточием s[x:y] .
Следующий программный код:
print(s[2:5]) print(s[0:6]) print(s[2:7])
При построении среза s[x:y] первое число – это то место, где начинается срез (включительно), а второе – это место, где заканчивается срез (невключительно). Разрезая строки, мы создаем подстроку, которая по сути является строкой внутри другой строки.
Срез до конца, от начала
Если опустить второй параметр в срезе s[x:] (но поставить двоеточие), то срез берется до конца строки. Аналогично если опустить первый параметр s[:y] , то можно взять срез от начала строки. Срез s[:] совпадает с самой строкой s .
Следующий программный код:
Срез s[:] возвращает исходную строку.
Отрицательные индексы в срезе
Мы также можем использовать отрицательные индексы для создания срезов. Как уже говорилось ранее, отрицательные индексы строки начинаются с -1 и отсчитываются до достижения начала строки. При использовании отрицательных индексов первый параметр среза должен быть меньше второго, либо должен быть пропущен.
Следующий программный код:
Удалить из строки последний символ можно при помощи среза s[:-1] .
Шаг среза
Мы можем передать в срез третий необязательный параметр, который отвечает за шаг среза. К примеру, срез s[1:7:2] создаст строку bdf состоящую из каждого второго символа (индексы 1, 3, 5 , правая граница не включена в срез).
Отрицательный шаг среза
Если в качестве шага среза указать отрицательное число, то символы будут идти в обратном порядке.
Следующий программный код:
Следующий программный код:
print(s[1:7:2]) print(s[3::2]) print(s[:7:3]) print(s[::2]) print(s[::-1]) print(s[::-2])
bdf dfhj adg acegi jihgfedcba jhfdb
Подводя итог
Программный код | Результат | Пояснение |
---|---|---|
s[2:5] | cde | строка состоящая из символов с индексами 2, 3, 4 |
s[:5] | abcde | первые пять символов строки |
s[5:] | fghij | строка состоящая из символов с индексами от 5 до конца |
s[-2:] | ij | последние два символа строки |
s[:] | abcdefghij | вся строка целиком |
s[1:7:2] | bdf | строка состоящая из каждого второго символа с индексами от 1 до 6 |
s[::-1] | jihgfedcba | строка в обратном порядке, так как шаг отрицательный |
Изменение символа строки по индексу
Предположим, у нас есть строка s = ‘abcdefghij’ и мы хотим заменить символ с индексом 4 на ‘X’ . Можно попытаться написать код:
Однако такой код не работает. В Python строки являются неизменяемыми, то есть мы не можем менять их содержимое с помощью индексатора.
Если мы хотим поменять какой-либо символ строки s , мы должны создать новую строку. Следующий код использует срезы и решает поставленную задачу:
Мы создаем два среза: от начала строки до 3 символа и с 5 символа по конец строки, а между ними вставляем нужный нам символ, который встанет на 4 позицию.
Примечания
Примечание 1. Синтаксис срезов строк очень похож на синтаксис функции range() .
Примечание 2. Если первый параметр среза больше второго, то срез создает пустую строку.
Индексация и разделение строк в Python 3
Умение работать со строками очень важно в любом языке программирования. Сегодня мы расскажем про строки в Python: что это такое, как найти индекс в строке python , какие есть методы работы с индексами.
Строки
Строки – это последовательности символьных данных, которые, как и любые другие типы данных в языке python на основе последовательностей, могут быть проиндексированы. Чтобы задать строку, надо заключить последовательность символов (буквы, цифры, пробелы, знаки препинания и т.д.) в одинарные, двойные или тройные кавычки. Индексирование символов начинается с нуля, и каждый символ в строке имеет собственный индекс. Индекс последнего символа на единицу меньше длины строки.
Если мы проверим тип переменной string , то получим: str .
Индексы
Числовые индексы могут быть положительными и отрицательными. Чтобы обратиться к символу по индексу, надо указать его в квадратных скобках [] . Если ссылаться на конкретный индекс, то можно получить символ, которому он соответствует:
print('4-й символ: ', string[4])
4-й символ: o
В нашей строке символ «o» имеет индекс 4.
Если мы попытаемся обратиться к символу по индексу, которого в строке нет, то получим ошибку:
print('15-й символ: ', string[15])
IndexError: string index out of range
Чтобы узнать максимальный индекс в строке можно отнять 1 от длины строки так как индексация начинается с 0:
print('Максимальный индекс в строке: ',len(string) - 1)
Максимальный индекс в строке: 14
При использовании индексы могут быть не только положительными, но и отрицательными. В этом случае индексация в Python идет с конца:
print('-1-й символ в строке: ', string[-1])
-1-й символ: !
Индекс -1 имеет последний символ строки.
Срезы строк
Можно выводить не только символ с конкретным индексом, но и диапазон символов в строке – подстроку. Для этого используется оператор нарезки, а фрагмент строки, который получается в итоге, называется срезом.
print('Символы с 1 по 6: ', string[1:6])
Символы с 1 по 6: e lov
В данном примере 1 – индекс начала среза, а 6 – индекс окончания среза. В подстроку входят символы с 1 по 5 включительно.
В случае, если требуется получить подстроку с 0 символа, то индекс начала среза можно опустить:
print('Символы с 0 по 6: ', string[:6])
Символы с 0 по 6: We lov
Аналогично в случае, если мы хотим получить срез до конца строки, мы можем опустить индекс окончания среза.
При разделении строк в Python 3 на срезы также можно использовать индексы с отрицательными значениями. Отрицательные индексы начинаются с -1 и уменьшаются при отдалении от конца строки:
print('Символы с -1 по -7: ', string[-7:-1])
Символы с -1 по -7: Python
Если не указывать индексы начала и конца среза, то мы получим всю строку:
print('Строка: ', string[:])
Строка: We love Python!
В случае с получением среза допускается указывать индексы, которые выходят за пределы строки:
print('Символы с 6 по 100: ', string[6:100])
Символы с 6 по 100: e Python!
При создании срезов также можно использовать еще один параметр – шаг. Шаг показывает, на сколько элементов требуется сдвинуться после получения символа. В примерах, рассмотренных выше, мы не указывали шаг, в таких случае используется значение по умолчанию, равное 1.
print('Подстрока с шагом 3: ', string[0:10:3])
Подстрока с шагом 3: Wley
Мы получили каждый третий элемент: W e l ov e P y thon!
Мы можем использовать шаг без указания начала и конца среза – в таком случае подстрока будет составляться из каждого n-ого элемента по всей строке.
print('Подстрока с шагом 3: ', string[::3])
Подстрока с шагом 3: Wleyo
Значение шага также может быть отрицательным.
Методы
Существует несколько методов, которые позволяют вести подсчет строк и выводить индексы строки python. Один из таких методов был рассмотрен выше: len(string) – длина строки.
Помимо длины строки мы можем также подсчитать количество вхождения какого либо символа или подстроки с помощью метода count() :
print('Количество вхождений символа e:', string.count('e'))
Количество вхождений символа e: 2
Следующий метод позволяет определить индекс символа или подстроки в исходной строке:
print('Индекс символа e:', string.find('e'))
Индекс символа e: 1
Первый символ «e» появляется на позиции с индексом 1. В случае если такой элемент не найден, метод вернет -1. Если мы находим индекс подстроки, мы получаем индекс ее первого символа:
print('Индекс подстроки love:', string.find('love'))
Индекс подстроки love: 3
Если нам нужно найти подстроку с определенного индекса, мы можем указать диапазон символов, в котором следует искать:
print('Индекс символа e:', string.find('e', 4,9))
Индекс символа e: 6
В случае необходимости получить максимальный индекс элемента в строке мы можем воспользоваться методом rfind() . Он работает аналогично find() , с той разницей, что find() находит минимальный индекс элемента (первое вхождение элемента в строку).
Для поиска подстроки можно воспользоваться методами index() и rindex() . Они работают аналогично find() и rfind() , однако в случае если подстрока не найдена возвращают ошибку:
ValueError: substring not found
Заключение
В этот раз мы рассмотрели особенности типов данных строки, индексацию и срез строк в Python 3 . Эти базовые знания пригодятся при выполнении самых разных задач с одним из самых популярных языков программирования . Дополнительную информацию вы можете найти в документации , а также в статьях о Python в блоге cloud.timeweb.com .