Выбрать главу

• Оператор [: end] извлекает последовательность от начала до точки, на которую указывает смещение end минус 1.

• Оператор [start: end] извлекает последовательность с точки, на которую указывает смещение start, до точки, на которую указывает смещение end минус 1.

• Оператор [start: end: step] извлекает последовательность с точки, на которую указывает смещение start, до точки, на которую указывает смещение end минус 1, опуская символы, чье смещение внутри подстроки кратно step.

Как и ранее, смещение слева направо определяется как 0, 1 и т. д., а справа налево — как -1, -2 и т. д. Если вы не укажете смещение start, функция будет использовать в качестве его значения 0 (начало строки). Если вы не укажете смещение end, функция будет использовать конец строки.

Создадим строку, содержащую английские буквы в нижнем регистре:

>>> letters = 'abcdefghijklmnopqrstuvwxyz'

Использование простого двоеточия аналогично использованию последовательности 0: (целая строка):

>>> letters[: ]

'abcdefghijklmnopqrstuvwxyz'

Вот так можно получить все символы, начиная с 20-го и заканчивая последним:

>>> letters[20:]

'uvwxyz'

А теперь — начиная с 10-го и заканчивая последним:

>>> letters[10:]

'klmnopqrstuvwxyz'

А теперь получим символы с 12-го по 14-й (Python не включает символ, расположенный под номером, который указан последним):

>>> letters[12:15]

'mno'

Последние три символа:

>>> letters[-3:]

'xyz'

В следующем примере мы начинаем со смещения 18 и идем до четвертого с конца символа. Обратите внимание на разницу с предыдущим примером, где старт с позиции -3 получал символ х. В этом примере конец диапазона -3 означает, что последним будет символ по адресу -4 — w:

>>> letters[18:-3]

'stuvw'

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

>>> letters[-6:-2]

'uvwx'

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

Каждый седьмой символ с начала до конца:

>>> letters[::7]

'ahov'

Каждый третий символ, начиная со смещения 4 и заканчивая 19-м символом:

>>> letters[4:20:3]

'ehknqt'

Каждый четвертый символ, начиная с 19-го:

>>> letters[19::4]

'tx'

Каждый пятый символ от начала до 20-го:

>>> letters[:21:5]

'afkpu'

Опять же значение end должно быть на единицу больше, чем реальное смещение.

И это еще не все! Если задать отрицательный шаг, любезный Python будет двигаться в обратную сторону. В следующем примере движение начинается с конца и заканчивается в начале, ни один символ не пропущен:

>>> letters[-1::-1]

'zyxwvutsrqponmlkjihgfedcba'

Оказывается, можно добиться того же результата, использовав такой пример:

>>> letters[::-1]

'zyxwvutsrqponmlkjihgfedcba'

Операция slice более мягко относится к неправильным смещениям, чем поиск по индексу. Если указать смещение меньшее, чем начало строки, оно будет обрабатываться как 0, а если указать смещение большее, чем конец строки, оно будет обработано как –1. Это показано в следующих примерах.

Начиная с –50-го символа и до конца:

>>> letters[-50:]

'abcdefghijklmnopqrstuvwxyz'

Начиная с –51-го символа и заканчивая –50-м:

>>> letters[-51:-50]

''

От начала до 69-го символа:

>>> letters[:70]

'abcdefghijklmnopqrstuvwxyz'

Начиная с 70-го символа и заканчивая 70-м:

>>> letters[70:71]

''

Получаем длину строки с помощью функции len()

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

Функция len() подсчитывает символы в строке:

>>> len(letters)

26

>>> empty = ""

>>> len(empty)

0

Вы можете использовать функцию len() и для других типов последовательностей, что показано в главе 3.

Разделяем строку с помощью функции split()

В отличие от функции len() некоторые функции характерны только для строк. Для того чтобы использовать строковую функцию, введите имя строки, точку, имя функции и аргументы, которые нужны функции: строка. функция(аргументы). Более подробно о функциях мы будем говорить в разделе «Функции» главы 4.