Вступительная теория
В Python существует мощный инструмент для работы со структурами данных – это срезы или slice. Срезы позволяют получать подмножество элементов из последовательности. Рассмотрим, как это работает.
⌛️ Перед началом работы с срезами, напомним, что в Python индексация начинается с 0, если мы начинаем счет слева и -1, если счет начинается справа.
Чтобы получить элементы на определенных позициях, мы можем использовать обычную индексацию. Например, если у нас есть список чисел:
lst = [1, 2, 3, 4, 5]
Мы можем получить элемент на позиции 0, используя следующий синтаксис:
lst[0] # результат 1
Теперь рассмотрим, что такое срезы.
У срезов есть три параметра: - Откуда начинать (включительно) - До какого момента (не включая) - Шаг (не обязательный параметр)
Первый и второй параметры не обязательно должны быть целыми числами, они также могут быть отсутствовать.
Если первый параметр отсутствует, срез начинается с начала.
Если второй параметр отсутствует, срез заканчивается в конце.
Срезы на примерах
Теперь давайте рассмотрим несколько примеров с использованием общего списка lst.
lst = [1, 2, 3, 4, 5]
Пример 1: Получить первые три элемента списка:
lst[:3] # результат [1, 2, 3]
lst[:3] - это срез списка, который начинается с первого элемента и заканчивается на третьем элементе.
Он возвращает новый список, содержащий первые три элемента списка.
Пример 2: Получить элементы со второго до четвертого (не включая четвертый):
lst[1:3] # результат [2, 3]
lst[1:3] - это срез списка, который начинается со второго элемента и заканчивается на третьем элементе.
Он возвращает новый список, содержащий второй и третий элементы списка.
Пример 3: Получить элементы с шагом 2:
lst[::2] # результат [1, 3, 5]
lst[::2] - это срез списка с шагом 2.
Он возвращает новый список, содержащий каждый второй элемент из исходного списка.
Пример 4: Изменить порядок элементов:
lst[::-1] # результат [5, 4, 3, 2, 1]
lst[::-1] - это срез списка с шагом -1.
Он возвращает новый список, содержащий все элементы из исходного списка в обратном порядке.
Пример 5: Получить элементы задом наперед:
lst[3:0:-1] # результат [4, 3, 2]
lst[3:0:-1] - это срез списка, который начинается с четвертого элемента и заканчивается на первом элементе с шагом -1.
Он возвращает новый список, содержащий элементы списка в обратном порядке от 4 до 1 включительно.
Где срезы могут пригодиться на экзамене?
В пятом номере часто требуют перевести число в двоичную запись, для этого мы можем использовать встроенную функцию bin() , но она возвращает результат с искажением, например:
n = 8
s = bin(n)
print(s) # результат 0b1000, а мы ожидали получить просто 1000
В данном случае проще всего будет срезать первые два элемента, то есть написать:
s = bin(n)[2:] # взяли все начинаю со 2-го по индексу
Часто нас просят взять сумму цифр в строке, а что, если в строке есть не только цифры, но и другие знаки, например:
s = '1243213231>'
Конечно мы можем написать следующий код используя генераторы списков:
print(sum([int(i) for i in s if i.isdigit()]))
Но вероятно, куда проще будет просто срезать крайний символ, то есть взять все до него:
print(sum([int(i) for i in s[:-1]]))
Уверены, что после прочтения этой статьи вы воспользуетесь срезами в своих программах!