Поиск значений в списке. Удаление элементов из списка. Удаление элементов из списка: дополнительный раунд
Поиск значений в списке
> > > a_list = ['a', 'b', 'new', 'mpilgrim', 'new']
> > > a_list. count('new') ①
2
> > > 'new' in a_list ②
True
> > > 'c' in a_list
False
> > > a_list. index('mpilgrim') ③
3
> > > a_list. index('new') ④
2
> > > a_list. index('c') ⑤
Traceback (innermost last):
File " < interactive input> ", line 1, in?
ValueError: list. index(x): x not in list
Перевод сообщения оболочки:
Раскрутка стека (от внешних к внутренним):
Файл " < интерактивный ввод> ", строка 1, позиция?
ValueError: list. index(x): x не в списке
①
| Как вы наверное ожидаете, метод count возвращает количество вхождений указанного значения в список.
|
②
| Если всё, что вам нужно — это узнать, присутствует ли значение в списке или нет, тогда оператор in намного быстрее, чем метод count(). Оператор in всегда возвращает True или False; он не сообщает, сколько именно в списке данных значений.
|
③
| Если вам необходимо точно знать, на каком месте в списке находится какое-либо значение, то используйте метод index(). По умолчанию, он просматривает весь список, но вы можете указать вторым аргументом индекс (отсчитываемый от нуля), с которого необходимо начать поиск, и даже третий аргумент — индекс, на котором необходимо остановить поиск.
|
④
| Метод index() находит только первое вхождение значения в списке. В данном случае 'new' встречается дважды в списке: в a_list[2] и a_list[4], но метод index() вернёт только индекс первого вхождения.
|
⑤
| Вопреки вашим ожиданиям, если значение не найдено в списке, то метод index() возбудит исключение. [waр-robіn. сom]
|
Постойте, что? Да, верно: метод index() возбуждает исключение, если не может найти значение в списке. Вы наверное заметили отличие от большинства других языков, которые возвращают какой-нибудь неверный индекс (например, -1). Если на первый взгляд это может немного раздражать, то, я думаю, в будущем вы примете этот подход. Это означает, что ваша программа будет аварийно завершена в том месте, где возникла проблема, вместо того чтобы тихо перестать работать в каком-нибудь другом месте. Запомните, -1 тоже является подходящим индексом для списков. Если бы метод index() возвращал -1, вас могли ожидать невесёлые вечера, потраченные на поиск ошибок в коде!
Удаление элементов из списка
Списки никогда не содержат разрывов.
Списки могут увеличиваться и сокращаться автоматически. Вы уже видели как они могут увеличиваться. Также существует несколько разных способов удалить элементы из списка.
> > > 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).
|
Воспользуйтесь поиском по сайту: