Элементы по индексу
Как и в других языках программирования, взятие по индексу:
>>>
>>> a = [1, 3, 8, 7]>>> a[0]1>>> a[3]7>>> a[4]Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: list index out of rangeКак и во многих других языках, нумерация элементов начинается с нуля. При попытке доступа к несуществующему индексу возникает исключение IndexError.
В данном примере переменная a являлась списком, однако взять элемент по индексу можно и у других типов: строк, кортежей.
В Python также поддерживаются отрицательные индексы, при этом нумерация идёт с конца, например:
>>>
>>> a = [1, 3, 8, 7]>>> a[-1]7>>> a[-4]1>>> a[-5]Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: list index out of rangeСрезы
В Python, кроме индексов, существуют ещё и срезы.
item[START:STOP:STEP] - берёт срез от номера START, до STOP (не включая его), с шагом STEP. По умолчанию START = 0, STOP = длине объекта, STEP = 1. Соответственно, какие-нибудь (а возможно, и все) параметры могут быть опущены.
>>>
>>> a = [1, 3, 8, 7]>>> a[:][1, 3, 8, 7]>>> a[1:][3, 8, 7]>>> a[:3][1, 3, 8]>>> a[::2][1, 8]Также все эти параметры могут быть и отрицательными:
>>>
>>> a = [1, 3, 8, 7]>>> a[::-1][7, 8, 3, 1]>>> a[:-2][1, 3]>>> a[-2::-1][8, 3, 1]>>> a[1:4:-1][]В последнем примере получился пустой список, так как START < STOP, а STEP отрицательный. То же самое произойдёт, если диапазон значений окажется за пределами объекта:
>>>
>>> a = [1, 3, 8, 7]>>> a[10:20][]Также с помощью срезов можно не только извлекать элементы, но и добавлять и удалять элементы (разумеется, только для изменяемых последовательностей).
>>>
>>> a = [1, 3, 8, 7]>>> a[1:3] = [0, 0, 0]>>> a[1, 0, 0, 0, 7]>>> del a[:-3]>>> a[0, 0, 7]