['honda', 'suzuki']
В обоих примерах значение, удаленное из списка после использования команды del, становится недоступным.
Удаление элемента с использованием метода pop()
Иногда значение, удаляемое из списка, должно как-то использоваться. Допустим, вы хотите получить координаты x и y только что сбитого корабля пришельцев, чтобы изобразить взрыв в этой позиции. В веб-приложении пользователь, удаленный из списка активных участников, может быть добавлен в список неактивных и т.д.
Метод pop() удаляет последний элемент из списка, но позволяет работать с ним после удаления. Удалим мотоцикл из списка:
(1) motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
(2)popped_motorcycle = motorcycles.pop()
(3)print(motorcycles)
(4)print(popped_motorcycle)
Сначала в точке (1) определяется и выводится содержимое списка motorcycles. В точке (2) значение извлекается из списка и сохраняется в переменной с именем popped_motorcycle. Вывод измененного списка в точке (3) показывает, что значение было удалено из списка. Затем мы выводим извлеченное значение в точке (4), демонстрируя, что удаленное из списка значение остается доступным в программе.
Из вывода видно, что значение 'suzuki', удаленное в конце списка, теперь хранится в переменной popped_motorcycle:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
Для чего может понадобиться метод pop()? Представьте, что мотоциклы в списке хранятся в хронологическом порядке в соответствии с датой их покупки. В таком случае команда pop() может использоваться для вывода сообщения о последнем купленном мотоцикле:
motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print("The last motorcycle I owned was a " + last_owned.title() + ".")
Программа выводит простое сообщение:
The last motorcycle I owned was a Suzuki.
Извлечение элементов из произвольной позиции списка
Вызов pop() может использоваться для удаления элемента в произвольной позиции списка; для этого следует указать индекс удаляемого элемента в круглых скобках.
motorcycles = ['honda', 'yamaha', 'suzuki']
(1) first_owned = motorcycles.pop(0)
(2)print('The first motorcycle I owned was a ' + first_owned.title() + '.')
Сначала первый элемент извлекается из списка в точке (1) , а затем в точке (2) выводится сообщение об этом мотоцикле. Программа выводит простое сообщение о первом мотоцикле:
The first motorcycle I owned was a Honda.
Помните, что после каждого вызова pop() элемент, с которым вы работаете, уже не находится в списке.
Если вы не уверены в том, какой из двух способов выбрать — команду del или метод pop(), — то простое правило поможет вам определиться. Если вы собираетесь просто удалить элемент из списка, никак не используя его, выбирайте команду del; если же вы намерены использовать элемент после удаления из списка, выбирайте метод pop().
Удаление элементов по значению
Иногда позиция удаляемого элемента неизвестна. Если вы знаете только значение элемента, используйте метод remove().
Допустим, из списка нужно удалить значение 'ducati':
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
(1) motorcycles.remove('ducati')
print(motorcycles)
Код в точке (1) приказывает Python определить, в какой позиции списка находится значение 'ducati', и удалить этот элемент:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
Метод remove() также может использоваться для работы со значением, которое удаляется из списка. Следующая программа удаляет значение 'ducati' и выводит причину удаления:
(1) motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
(2)too_expensive = 'ducati'
(3)motorcycles.remove(too_expensive)
print(motorcycles)
(4)print("\nA " + too_expensive.title() + " is too expensive for me.")
После определения списка в точке (1) значение 'ducati' сохраняется в переменной с именем too_expensive в точке (2). Затем эта переменная сообщает Python, какое значение должно быть удалено из списка (3). В точке (4) значение 'ducati' было удалено из списка, но продолжает храниться в переменной too_expensive, что позволяет вывести сообщение с причиной удаления 'ducati' из списка мотоциклов:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
примечание
Метод remove() удаляет только первое вхождение заданного значения. Если существует вероятность того, что значение встречается в списке более одного раза, используйте цикл для определения того, были ли удалены все вхождения данного значения. О том, как это делать, рассказано в главе 7.
Упражнения
Следующие упражнения немного сложнее упражнений из главы 2, но они предоставляют возможность попрактиковаться в выполнении всех описанных операций со списками.
3-4. Список гостей: если бы вы могли пригласить кого угодно (из живых или умерших) на обед, то кого бы вы пригласили? Создайте список, включающий минимум трех людей, которых вам хотелось бы пригласить на обед. Затем используйте этот список для вывода пригласительного сообщения каждому участнику.