Список: изменение и перебор
Уроки курсаСписок: изменение и перебор
Удаление элементов: remove и pop
Удалять элементы из списка можно двумя способами: по значению и по индексу. Под каждый случай — свой метод.
remove() ищет в списке первое вхождение указанного значения и удаляет его.
tasks = ["купить хлеб", "выпить кофе", "позвонить врачу", "выпить кофе"]
tasks.remove("выпить кофе")
print(tasks)
# ['купить хлеб', 'позвонить врачу', 'выпить кофе']
Обратите внимание: удалился только первый «выпить кофе», второй остался. Метод не трогает дубликаты дальше первого совпадения.
Если передать значение, которого в списке нет, Python выбросит ValueError:
tasks = ["купить хлеб", "позвонить врачу"]
tasks.remove("сходить в спортзал") # ValueError: list.remove(x): x not in list
Чтобы не словить ошибку, перед удалением проверяйте наличие через in:
task_to_remove = "сходить в спортзал"
if task_to_remove in tasks:
tasks.remove(task_to_remove)
else:
print("Такой задачи нет в списке")
pop() работает иначе: удаляет элемент по индексу и при этом возвращает его. Это принципиальное отличие от remove() — вы получаете удалённое значение обратно.
tasks = ["купить хлеб", "позвонить врачу", "сделать зарядку"]
done = tasks.pop(1)
print(done) # позвонить врачу
print(tasks) # ['купить хлеб', 'сделать зарядку']
Без аргумента pop() удаляет последний элемент — это удобно, когда список используется как стек:
tasks = ["купить хлеб", "позвонить врачу", "сделать зарядку"]
last = tasks.pop()
print(last) # сделать зарядку
print(tasks) # ['купить хлеб', 'позвонить врачу']
Если передать индекс, которого не существует, получите IndexError — та же ошибка, что при обращении к несуществующему элементу через квадратные скобки:
tasks = ["купить хлеб"]
tasks.pop(5) # IndexError: pop index out of range
Вот ключевые различия между двумя методами:
remove(value)— удаляет по значению, возвращаетNone, выбрасываетValueErrorесли значения нет.pop(i)— удаляет по индексу, возвращает удалённый элемент, выбрасываетIndexErrorесли индекс вне диапазона.
Выбор между ними зависит от задачи: если вы знаете, что именно хотите убрать — remove(), если знаете, где оно стоит или нужен сам удалённый элемент — pop().
