Опубликован: 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()
Комментариев нет.