Использование срезов для манипулирования объектами в Python

Опубликован: 31.10.2023 93

Срезы в Python - это мощный и гибкий инструмент для манипулирования итерируемыми и индексируемыми последовательностями (списками, строками, массивами, кортежами).

Срез, в отличие от индекса, позволяет извлекать (или изменять) сразу несколько элементов последовательности.

Общий синтаксис: sequence[start:stop:step]

  • sequence - индексируемая последовательность;
  • start - индекс начала среза, целое число, по умолчанию равно 0;
  • stop - индекс конца среза, целое число, по умолчанию равно длине последовательности;
  • step - целое число, шаг среза, по умолчанию равен 1.

При работе со срезами важно помнить, что индексация в Python начинается с нуля и индекс конца среза stop в результат выборки не включается.

# пример использования среза для выборки элементов списка
numbers = list(range(10))

print(numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(numbers[3:5])
[3, 4]

print(numbers[2:])
[2, 3, 4, 5, 6, 7, 8, 9]

В результате применения среза sequence[start:stop:step] создается новый объект slice[start:stop:step], который является копией диапазона исходной последовательности и может быть поименован (по аналогии с диапазоном ячеек в Exel) для удобства последующего использования в коде программы.

numbers = list(range(10))

# выборка первых 5-ти элементов списка с шагом 2
slice_begin = numbers[:5:2]
print(slice_begin)
[0, 2, 4]

# выборка последних 5-ти элементов списка с шагом 2
slice_end = numbers[5::2]
print(slice_end)
[5, 7, 9]

Срезы можно использовать не только для выборки части последовательности, но и для модификации изменяемых последовательностей "на месте", без перестраивания всего объекта целиком.

Изменяемую последовательность можно расширять, изменять или схлопывать прямо "на месте", применяя нотацию среза в левой части оператора присваивания (как этот показано на примерах ниже).

При этом, !!! ВАЖНО, чтобы с правой стороны оператора присваивания стоял итерабельный объект, даже если в левой части необходимо изменить только один элемент.

numbers = list(range(10))

# присваивание срезом новых значений диапазону элементов в списке
numbers[2:5] = ['a', 'b', 'c']
print(numbers)
[0, 1, 'a', 'b', 'c', 5, 6, 7, 8, 9]

# схлопывание списка с заменой трех элементов (с 4 по 7) на одно значение 50
numbers[4:7] = [50] 
print(numbers)
[0, 1, 'a', 'b', 50, 7, 8, 9]

Похожие посты

Переворот итерируемых объектов нарезкой

Методы преобразования списка в строку и обратно

Удаление дубликатов из списка

Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()

Комментариев нет.