Срезы списков

Срезы — один из самых выразительных инструментов Python для работы со списками. Они позволяют получить часть списка в виде нового списка, указав начальный и конечный индексы, а также шаг.

Что нужно знать

Перед изучением примера полезно понимать:

Общий синтаксис среза — list_name[start: stop: step]:

  • start — индекс, с которого начинается срез;

  • stop — индекс, на котором срез заканчивается (этот элемент уже не входит в результат);

  • step — шаг: позволяет выбирать каждый n-й элемент в диапазоне между start и stop.

Принцип работы тот же, что и у встроенной функции slice().

Все элементы

my_list = [1, 2, 3, 4, 5]

print(my_list[:])

Вывод

[1, 2, 3, 4, 5]

Если в срезе указано только двоеточие, получаем все элементы списка. По сути это то же самое, что просто print(my_list).

Все элементы после указанной позиции

my_list = [1, 2, 3, 4, 5]

print(my_list[2:])

Вывод

[3, 4, 5]

Если перед двоеточием указан индекс, в срез попадают все элементы начиная с этого индекса и до конца списка. В примере получены элементы с индекса 2 и далее.

Примечание

Индексация начинается с 0. Элемент по индексу 2 включается в результат.

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

my_list = [1, 2, 3, 4, 5]

print(my_list[:2])

Вывод

[1, 2]

Когда индекс указан после двоеточия, в срез попадают элементы от начала списка и до этого индекса (не включая его). В примере получены элементы до индекса 2.

Элементы между двумя позициями

my_list = [1, 2, 3, 4, 5]

print(my_list[2:4])

Вывод

[3, 4]

Если указать индексы и до, и после двоеточия, срез вернёт элементы между ними. В примере my_list[2:4] берёт элементы между индексами 2 и 4: стартовая позиция включается, конечная — нет.

Элементы с заданным интервалом

my_list = [1, 2, 3, 4, 5]

print(my_list[::2])

Вывод

[1, 3, 5]

Два двоеточия позволяют указать шаг. В примере берётся каждый второй элемент начиная с индекса 0.

Чтобы пройти список с конца, шаг делают отрицательным:

my_list = [1, 2, 3, 4, 5]

print(my_list[::-2])

Вывод

[5, 3, 1]

Здесь берётся каждый второй элемент, но начиная с последнего.

Можно одновременно указать начальную и конечную позиции и шаг:

my_list = [1, 2, 3, 4, 5]

print(my_list[1:4:2])

Вывод

[2, 4]

Срез берёт элементы из диапазона от индекса 1 до 4 с шагом 2.