Списки в Python. Часть 1 - Срезы.
20.10.2007
Списки в языке Python – это очень мощный инструмент, позволяющий строить самые невероятные конструкции и оригинально решать стандартные задачи программирования в одну строку. Достигается это благодаря богатой функциональности и гибкости. Я не буду рассматривать те вещи, без которых нельзя обойтись, а постараюсь описать самые вкусности.
В списках могут быть данные любых, и одновременно разных типов, также списки могут быть вложенными. Срез или слайс (от англ. slice) - это извлечение части списка. Создадим список (для простоты взят пример с числами):
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
В таблице ниже приведены примеры получения отдельных элементов и последовательностей по срезу. Указывая индексы и шаг можно извлекать нужную часть списка. Запись среза имеет вид obj[[start]:[stop][:[step]]], где start -верхняя граница, stop - нижняя граница, step - шаг.
| Операция | Результат | Описание |
| a[0] | 0 | первый элемент |
| a[:3] | [0, 1, 2] | первые 3 элемента |
| a[5:] | [5, 6, 7, 8, 9] | с 5-го элемента и до конца |
| a[2:7] | [2, 3, 4, 5, 6] | со 2-го по 7-й элемент не включительно |
| a[-1] | 9 | последний элемент |
| a[:-3] | [0, 1, 2, 3, 4, 5, 6] | все без 3-х последних элементов |
| a[-3:] | [7, 8, 9] | 3 последние элемента |
| a[2:-2] | [2, 3, 4, 5, 6, 7] | без первых и последних 2-х элементов |
| a[-5:-3] | [5, 6] | 5 последних элементов без 3-х с конца |
| a[::2] | [0, 2, 4, 6, 8] | все элементы с шагом 2 |
| a[::-2] | [9, 7, 5, 3, 1] | все элементы с шагом 2 с конца |
| a[::-1] | [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] | переворачивает список |
| a[2:7:2] | [2, 4, 6] | со 2-го по 7-й элемент с шагом 2 |
| a[7:2:-2] | [7, 5, 3] | со 7-го по 2-й элемент с шагом 2 с конца |
Таким же образом можно изменять последовательности. Например a[2:5] = [0, 0] изменит список a на [0, 1, 0, 0, 5, 6, 7, 8, 9]. Теперь немного усложним - пусть нужно обнулить все четные элементы. Сделать это можно так a[::2] = [0] * 5 (операция [0] * 5 создает список [0, 0, 0, 0, 0]), в результате последовательность a будет такой [0, 2, 0, 4, 0, 6, 0, 8, 0].
Leave a Reply