Срезы списков
Срезы — один из самых выразительных инструментов Python для работы со списками. Они позволяют получить часть списка в виде нового списка, указав начальный и конечный индексы, а также шаг.
Что нужно знать
Перед изучением примера полезно понимать:
Python: список (list) — работа со списками и индексация
Общий синтаксис среза — 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.