Язык программирования Python

       

Взятие элемента по индексу и срезы


Здесь же следует сказать несколько слов об индексировании последовательностей и выделении подстрок (и вообще - подпоследовательностей) по индексам. Для получения отдельного элемента последовательности используются квадратные скобки, в которых стоит выражение, дающее индекс. Индексы последовательностей в Python начинаются с нуля. Отрицательные индексы служат для отсчета элементов с конца последовательности (-1 - последний элемент). Пример проясняет дело:

>>> s = [0, 1, 2, 3, 4] >>> print s[0], s[-1], s[3] 0 4 3 >>> s[2] = -2 >>> print s [0, 1, -2, 3, 4] >>> del s[2] >>> print s [0, 1, 3, 4]

Примечание:

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

Несколько интереснее обстоят дела со срезами. Дело в том, что в Python при взятии среза последовательности принято нумеровать не элементы, а промежутки между ними. Поначалу это кажется необычным, тем не менее, очень удобно для указания произвольных срезов. Перед нулевым (по индексу) элементом последовательности промежуток имеет номер 0, после него - 1 и т.д.. Отрицательные значения отсчитывают промежутки с конца строки. Для записи срезов используется следующий синтаксис:

последовательность[нач:кон:шаг]

где нач - промежуток начала среза, кон - конца среза, шаг - шаг. По умолчанию нач=0, кон=len(последовательность), шаг=1, если шаг не указан, второе двоеточие можно опустить.

А теперь пример работы со срезами:

>>> s = range(10) >>> s [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> s[0:3] [0, 1, 2] >>> s[-1:] [9] >>> s[::3] [0, 3, 6, 9] >>> s[0:0] = [-1, -1, -1] >>> s [-1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> del s[:3] >>> s [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

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



Содержание раздела