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

collection[startIndex:endIndex:step]

С помощью такой записи мы получаем все элементы коллекции начиная со startIndex включительно до endIndex не включительно с шагом step. Пара примеров

people=["Маша", "Таня", "Олег", "Миша", "Петя"]
print(people[2:5:1]) # ["Олег", "Миша", "Петя"]
heights=(176,180,175,165,166,170)
print(heights[1:5:1]) # (180, 175, 165, 166)
sentence="Не ждем, а готовимся"
print(sentence[4:18:3]) # "д, ти"

Также отметим, что все параметры среза могут быть как отрицательными, так и положительными. В случае со startIndex и endIndex мы просто говорим об отрицательной нумерации, как это было с обычными индексами. А вот когда речь заходит об отрицательном step, мы разворачиваем направление прохода по коллекции.

people=["Маша", "Таня", "Олег", "Миша", "Петя"]
print(people[-1:-6:-1]) # ["Петя", "Миша", "Олег", "Таня", "Маша"]
values=[125,165,155,170]
print(values[-2:-5:-2]) # [155, 125]

При использовании срезов у нас есть возможность опускать некоторые параметры, которые заполняются значениями по умолчанию. Если мы ставим одно двоеточие, то мы можем указывать только параметры startIndex и endIndex, а параметр step опускается и считается равным 1.

people=["Маша", "Таня", "Олег", "Миша", "Петя"]
print(people[2:5]) # ["Олег","Таня","Маша"]
values=[125,165,155,170]
print(values[1:4]) # [165,155,170]

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

people=["Маша", "Таня", "Олег", "Миша", "Петя"]
print(people[:3]) # ["Маша", "Таня", "Олег"]
values=[125,165,155,170]
print(values[1:]) # [165,155,170]

Т.е. в первом примере выше startIndex=0, а во втором endIndex=len(values)=4.

А также мы можем опустить startIndex и endIndex и указать только шаг. Этот механизм нередко используется для "разворота" коллекции. По умолчанию startIndex и endIndex равны 0 и len(collection) соответственно.

people=["Маша", "Таня", "Олег", "Миша", "Петя"]
print(people[::2]) # ["Маша","Олег", "Петя"]
values=[125,165,155,170]
print(values[::-1]) # [170,155,165,125]
Последнее изменение: пятница, 8 августа 2025, 12:34