Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Поиск значений в списке. Удаление элементов из списка. Удаление элементов из списка: дополнительный раунд




Поиск значений в списке

> > > 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).
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...