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

Но когда надо получить элементы с 1 по 3, или четные, или каждый третий - то одними индексами не обойтись. Поэтому в Python есть понятие - СРЕЗы.

s = [1, 2, 3, 4, 5, 6, 7, 8]
s[i:j:d]  Срез от i до j (с шагом d)

Такая конструкция позволяет получать элементы по правилу. В данном случае мы получим элементы с индекса i до индекса j с шагом d.

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

def super_function(sl, data1, data2):
    d1 = data1[sl]
    d2 = dat2[sl]

В таком случае есть встроенный класс slice, который возвращает структуру похожую на range(start, stop, step). Этот объект можно передавать в функцию и использовать как любой другой объект.

>>> a = [1, 2, 3, 4, 5]
>>> a[1:3]
[2, 3]
>>> a[slice(1, 3)]
[2, 3]


Комментарии