Найти в Дзене

Программирование на Python. Срезы

Срезы – это инструмент для перебора элементов массива, который есть только в 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. Получить новый список, образованный путем «разворота» исходного списка справа налево.

Комменты приветствуются, за палец вверх - отдельное спасибо. Удачи!