Удаление элементов из списка
Списки никогда не содержат разрывов.
Списки могут увеличиваться и сокращаться автоматически. Вы уже видели как они могут увеличиваться. Также существует несколько разных способов удалить элементы из списка.
>>> a_list = ['a', 'b', 'new', 'mpilgrim', 'new']
>>> a_list[1]
'b'
>>> del a_list[1] ①
>>> a_list
['a', 'new', 'mpilgrim', 'new']
>>> a_list[1] ②
'new'
① | Можно использовать выражение del для удаления определенного элемента из списка. |
② | Если после удаления элемента с индексом 1 опять попытаться прочитать значение списка с индексом 1, это не вызовет ошибки. Все элементы после удаления смещают свои индексы, чтобы «заполнить пробел», возникший после удаления элемента. |
Не знаете индекс? Не беда — можно удалить элемент по значению.
>>> a_list.remove('new') ①
>>> a_list
['a', 'mpilgrim', 'new']
>>> a_list.remove('new') ②
>>> a_list
['a', 'mpilgrim']
>>> a_list.remove('new')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
Перевод сообщений оболочки:
Раскрутка стека (список последних вызовов):
Файл "<stdin>", строка 1, <модуль>
ValueError: list.remove(x): x не в списке
① | Можно удалить элемент из списка при помощи метода remove(). Метод remove() в качестве параметра принимает значение и удаляет первое вхождение этого значения из списка. Кроме того, индексы всех элементов, следующих за удалённым, будут сдвинуты, чтобы «заполнить пробел». Списки никогда не содержат разрывов. |
② | Можно вызывать метод remove() столько, сколько хотите, однако если попытаться удалить значение, которого нет в списке, будет порождено исключение. |
Удаление элементов из списка: дополнительный раунд
Другой интересный метод списков — pop(). Метод pop() — это еще один способ удалить элементы из списка, но с одной особенностью.
>>> a_list = ['a', 'b', 'new', 'mpilgrim']
>>> a_list.pop() ①
'mpilgrim'
>>> a_list
['a', 'b', 'new']
>>> a_list.pop(1) ②
'b'
>>> a_list
['a', 'new']
>>> a_list.pop()
'new'
>>> a_list.pop()
'a'
>>> a_list.pop() ③
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop from empty list
Перевод сообщения оболочки:
Раскрутка стека (список последних вызовов):
Файл "<stdin>", строка 1, <модуль>
IndexError: pop из пустого списка
① | Если вызвать pop() без аргументов, он удалит последний элемент списка и вернет удаленное значение. |
② | С помощью метода pop() можно удалить любой элемент списка. Просто вызовите метод с индексом элемента. Этот элемент будет удалён, а все элементы после него сместятся, чтобы «заполнить пробел». Метод возвращает удалённое из списка значение. |
③ | Метод pop() для пустого списка возбуждает исключение. |
Вызов метода pop() без аргументов эквивалентен вызову функции pop() в Perl. Он удаляет последний элемент из списка и возвращает удалённое значение. В языке программирования Perl есть также функция shift(), которая удаляет первый элемент и возвращает его значение. В Python это эквивалентно a_list.pop(0). |