Включите исполнение JavaScript в браузере, чтобы запустить приложение.
22 апр 2025

Как удалить элемент из списка на Python

Программисты на Python часто выполняют различные операции со списками. Удаление элементов — одна из таких операций. В этой статье рассмотрим методы, примеры и ошибки в ее реализации.

Основные методы удаления элементов из списка

В Python можно несколькими способами удалить записи из списка. У каждого метода — свое назначение, поэтому выбор между ними зависит от текущей задачи:

  • remove() — применяется для удаления первого элемента, совпадающего с указанным значением;
  • pop() — используется для удаления и возврата элемента по индексу;
  • del() — нужен для удаления элемента по индексу/срезу (срез — это инструмент, с помощью которого можно выбрать последовательность значений);
  • clear() и операция присваивания — для полной очистки содержимого объекта.

Чтобы работать с этими методами эффективно, важно учитывать не только их назначение, но и ограничения, которые рассмотрим далее.

Как удалить элемент по значению

Когда значение удаляемого элемента известно, лучше всего подойдет метод remove():

books = ["Капитанская дочка", "Мастер и Маргарита", "Станционный смотритель", "Евгений Онегин"]

books.remove("Мастер и Маргарита")

print(books)  

# Вывод: ['Капитанская дочка', 'Станционный смотритель', 'Евгений Онегин']
py

При этом удалится только первая запись с совпадающим значением. Если в списке есть повторы, то они останутся:

books = ["Капитанская дочка", "Мастер и Маргарита", "Станционный смотритель", "Евгений Онегин", "Мастер и Маргарита"]

books.remove("Мастер и Маргарита")

print(books)  

# Вывод: ['Капитанская дочка', 'Станционный смотритель', 'Евгений Онегин', 'Мастер и Маргарита']
py

Если указать несуществующую строку, то вернется ValueError:

books = ["Капитанская дочка", "Мастер и Маргарита", "Руслан и Людмила", "Евгений Онегин"]

books.remove("Собачье сердце")

# Результат: ValueError: list.remove(x): x not in list
py

Как удалить элемент по индексу

Бывают и ситуации, когда известен только индекс записи, которую нужно удалить. Тогда подойдут два метода.

  • Pop() — удаляет содержимое по индексу, а также возвращает его значение:
authors = ["Александр Пушкин", "Александр Островский", "Федор Достоевский", "Лев Толстой"]

deleted = authors.pop(1)

print(deleted)

print(authors)  

# Вывод:

# Александр Островский

# ['Александр Пушкин', 'Федор Достоевский', 'Лев Толстой']
py

Если в pop() ничего не передать, то удаляется последняя запись:

authors = ["Александр Пушкин", "Александр Островский", "Федор Достоевский", "Лев Толстой"]

deleted = authors.pop()

print(deleted)

print(authors)  

# Вывод:

# Лев Толстой

# ['Александр Пушкин', 'Александр Островский', 'Федор Достоевский']
py

Pop() предпочтительнее, когда удаляемое значение еще будет использоваться.

  • Del() — удаляет запись по индексу:
cities = ["Москва", "Екатеринбург", "Санкт-Петербург", "Ростов-на-Дону"]

del cities[1]

print(cities)  

# Вывод: ['Москва', 'Санкт-Петербург', 'Ростов-на-Дону']
py

Также можно указать срез:

cities = ["Москва", "Екатеринбург", "Санкт-Петербург", "Ростов-на-Дону"]

del cities[1:3] # Удалены будут записи с индексами 1, 2

print(cities)  

# Вывод: ['Москва', 'Ростов-на-Дону']
py

Если выйти за рамки списка, то вернется IndexError, например:

list = [10, 20, 30, 40]

del list[5]

# Результат: IndexError: list assignment index out of range
py

Как удалить все элементы списка

Иногда возникают ситуации, когда нужно очистить все содержимое. Это можно сделать с помощью clear() либо через операцию присваивания:

items = [1, 2, 3]

items.clear()

print(items)  

# Результат: []

items = []

print(items)  

# Результат: []
py

Важно понимать, что оба метода нужны для очистки содержимого, а не для удаления самого объекта списка, но разница между ними все же есть: при использовании clear() ссылка на объект остается неизменной, а если выполняется операция присваивания — меняется.

Также очистить список позволяет del():

seasons = ['зима', 'весна', 'лето', 'осень']

del seasons[:]  

print(seasons)  

# Вывод: []
py

Ссылка на объект не меняется.

Примеры использования методов del, remove и pop в Python

Рассмотрим еще несколько примеров применения методов:

  • Если передать del() отрицательный индекс, то удалена будет последняя запись:
seasons = ['зима', 'весна', 'лето', 'осень']

del seasons[-1]  

print(seasons)  

# Вывод: ['зима', 'весна', 'лето']
py
  • С помощью срезов можно задать шаг, с которым нужно удалить записи:
seasons = ['зима', 'весна', 'лето', 'осень']

del seasons[::2]  

print(seasons)  

# Вывод: ['весна', 'осень']
py
  • Чтобы очистить все записи с определенным содержимым, можно воспользоваться циклом while:
fruits = ['киви', 'банан', 'апельсин', 'яблоко', 'киви']

while 'киви' in fruits:

    fruits.remove('киви')

print(fruits)  

# Вывод: ['банан', 'апельсин', 'яблоко']
py
  • Pop() используют, когда удаляемое значение еще пригодится, так как метод возвращает его. Выглядеть это может так:
values = [10, 20, 30, 40, 50]

total = 0

while values:

    total += values.pop()  

print(total)  

# Вывод: 150
py

Частые ошибки при удалении элементов 

  • Попытка обратиться к несуществующему значению/индексу. Чтобы избежать возникающих в таких случаях ошибок, можно проверять, есть ли данное значение:
numbers = [1, 2, 3]

if 4 in numbers:

    numbers.remove(4)

print(numbers)

# Результат: [1, 2, 3]
py

Или есть ли этот индекс (для этого проверяется длина):

numbers = [1, 2, 3]

if 3 < len(numbers):

    numbers.pop(3)

print(numbers)

# Результат: [1, 2, 3]
py
  • Попытка очистить записи в цикле. В чем проблема таких операций? Когда элементы начинают удаляться, индексы следующих значений изменяются, в то время как цикл продолжает обходить список по его исходным позициям. Поэтому лучше создать цикл, который будет обходить копию списка:
values = [1, 2, 2, 3]

for num in values[:]:  

    if num == 2:

        values.remove(num)

print(values)  

# Результат: [1, 3]
py

Второй вариант — использовать цикл while, как это показано в примерах.

  • Попытка удалить данные во вложенном списке:
nested = [[1, 2], [3, 4], [5, 6]]

nested.remove(3)

# Результат: ValueError: list.remove(x): x not in list
py

Чтобы избежать ошибки, нужно использовать цикл:

nested = [[1, 2], [3, 4], [5, 6]]

for sublist in nested:

    if 3 in sublist:

        sublist.remove(3)

print(nested)

# Результат: [[1, 2], [4], [5, 6]]
py