Срезы – это инструмент для перебора элементов массива, который есть только в Python (хотя, может, и еще где-то есть). Гениальное изобретение. Ранее, для того, чтобы перебрать элементы массива, необходимо было применить цикл. Теперь же все стало намного проще. Причем как визуально, так и практически.
Общая форма записи среза выглядит так:
arr[a:b:c],
где arr – это идентификатор списка или кортежа, a и b – начальный и конечный индексы элементов, c – шаг.
Например, нам дан список 10 чисел, и необходимо получить новый список, содержащий каждый второй элемент исходного списка. Тогда достаточно написать так:
res = arr[0:9:2]
Расшифруем. Начальный индекс 0, конечный 9. Шаг перебора 2.
Кстати, по умолчанию (как и в циклах) шаг перебора равен 1, поэтому его можно не писать. Поэтому, если бы нам, к примеру, нужно было бы скопировать первую половину исходного списка, то мы бы написали так:
res = arr[0:4]
Кроме того, если начальный и/или конечный индексы среза равны, соответственно, начальному и/или конечному индексу исходного массива, то их можно не указывать. Таким образом, предыдущий пример можно упростить до такой записи:
res = arr[:4]
Ну, а если нам нужна не первая, а вторая половина исходного списка, то можно написать так:
res = arr[5:]
Если требуется скопировать весь исходный массив, то достаточно написать так:
res = arr[:]
Заметьте, что просто написать res = arr нельзя, т.к. в данном случае мы получим не самостоятельную копию, а некое отражение, двойника, который будет изменяться в соответствии со всеми изменениями, которые будут происходить с исходным массивом. То есть, если в исходный список добавить какой-либо элемент, или удалить из него элемент, то соответствующие изменения произойдут и в результирующем списке.
Далее, если требуется скопировать весь исходный список, но с шагом, например, 2, то достаточно написать так:
res = arr[::2]
Шаг может быть отрицательным. Поэкспериментируйте, выясните, к чему это приведет.
Еще один момент. Значение индексов может быть отрицательным. Рассмотрим на примере, как это работает. Например, нам дана строковая переменная
s= ‘Москва’
Чтобы получить последнюю букву, не зная длины слова, достаточно написать s[-1]. Соответственно, вторая с конца буква имеет индекс s[-2]. Это может быть очень удобным в том случае, если размер массива неизвестен или не хочется захламлять код лишними функциями – потому что то же самое можно было бы сделать с помощью такой конструкции:
s[len(s) - 1]
Отрицательные индексы могут пригодиться также и в срезах. Например, нам нужно скопировать почти весь список, кроме последнего элемента. Достаточно написать так:
res = arr[:-1]
------------------------------
Список уроков Программирование на Python для начинающих. Базовый уровень
Следующий урок Функции
Предыдущий урок Работа с файлами
------------------------------
Задания
1. Дано слово. Образовать новое слово, полученное за счет перестановки первой и второй половин исходного слова. Если количество символов нечетное, то первую часть слова принять меньшей.
2. Имеется список чисел от 0 до 9. Получить новый список, образованный путем «разворота» исходного списка справа налево.
Комменты приветствуются, за палец вверх - отдельное спасибо. Удачи!