W3docs

Удаление элементов списка

Все способы удаления элементов из списка Python: remove(), pop(), del, clear() и списковые включения — с примерами и нюансами.

Списки Python — это изменяемые последовательности, поэтому вы можете удалять элементы в любой момент. В этой главе рассматриваются все встроенные инструменты для удаления элементов списка: remove(), pop(), оператор del, clear() и списковые включения. Каждый подход подходит для определённой ситуации, и умение выбирать нужный помогает избежать распространённых ошибок.

Краткий справочник

Метод / операторУдаляет поВозвращает удалённый элемент?Ошибка, если цель не найдена?
list.remove(value)Первому совпадающему значениюНетValueError
list.pop()Последнему элементу (по умолчанию)ДаIndexError при пустом списке
list.pop(index)Элементу по индексуДаIndexError при выходе за границы
del list[index]Элементу по индексуНетIndexError при выходе за границы
del list[start:stop]Срезу элементовНетНикогда (пустой срез допустим)
list.clear()Всем элементамНетНикогда
Списковое включениеЭлементам, соответствующим условиюНет (возвращает новый список)Никогда

Метод remove()

list.remove(value) находит первое вхождение value и удаляет его. Если значение отсутствует, Python генерирует исключение ValueError.

Удалить элемент по значению

python— editable, runs on the server

Удаляется только первое вхождение

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

my_list = [1, 3, 2, 3, 4, 3]
my_list.remove(3)
print(my_list)  # [1, 2, 3, 4, 3]

Защита от ValueError

Всегда проверяйте наличие значения перед вызовом remove() или перехватывайте исключение:

Проверка с помощью in перед удалением

python— editable, runs on the server

Перехват исключения

my_list = [1, 2, 4, 5]
try:
    my_list.remove(3)
except ValueError:
    print("3 is not in the list")
# Output: 3 is not in the list

Удаление всех вхождений с помощью цикла

Используйте цикл while, чтобы продолжать удалять значение до тех пор, пока оно не исчезнет:

Удалить все вхождения элемента

python— editable, runs on the server

Метод pop()

list.pop(index) удаляет элемент по index и возвращает его, чтобы вы могли использовать это значение. Если индекс не указан, метод удаляет и возвращает последний элемент. Это делает pop() идеальным выбором, когда нужно обработать удалённое значение.

Удалить последний элемент

python— editable, runs on the server

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

my_list = [1, 2, 3, 4, 5]
item = my_list.pop(1)   # removes and returns 2
print(item)             # 2
print(my_list)          # [1, 3, 4, 5]

IndexError при вызове pop()

Вызов pop() на пустом списке или с индексом вне допустимого диапазона вызывает IndexError:

empty = []
empty.pop()   # IndexError: pop from empty list

my_list = [1, 2, 3]
my_list.pop(10)   # IndexError: pop index out of range

Оператор del

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

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

Удалить элемент с индексом 2

python— editable, runs on the server

Удалить срез элементов

del принимает ту же нотацию срезов, что и индексирование, что позволяет легко удалить диапазон элементов за один шаг:

my_list = [1, 2, 3, 4, 5]
del my_list[1:3]   # removes index 1 and 2 (values 2 and 3)
print(my_list)     # [1, 4, 5]

Удаление пустого или выходящего за границы среза никогда не вызывает ошибку — оно просто не имеет никакого эффекта.

Удалить переменную списка целиком

del может также удалить саму переменную списка, а не только его содержимое:

my_list = [1, 2, 3]
del my_list
# my_list is now undefined; referencing it raises NameError

Метод clear()

list.clear() удаляет все элементы из списка, оставляя пустой список. Сам объект списка при этом сохраняется (в отличие от del my_list).

my_list = [1, 2, 3, 4, 5]
my_list.clear()
print(my_list)  # []

clear() эквивалентен del my_list[:] (удаление всего среза), но читается нагляднее.

Списковое включение для условного удаления

Списковое включение формирует новый список, включая только те элементы, которые удовлетворяют условию, тем самым эффективно отфильтровывая ненужные. Это наиболее понятный способ удалить все элементы, соответствующие сложному условию.

Удалить все вхождения значения

python— editable, runs on the server

Удалить все чётные числа

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
odd_only = [x for x in numbers if x % 2 != 0]
print(odd_only)  # [1, 3, 5, 7]

Поскольку списковое включение возвращает новый список, а не изменяет исходный, его безопасно использовать, когда нужно сохранить оригинал неизменным или когда условие фильтрации охватывает несколько значений одновременно.

Выбор подходящего способа

  • Знаете значение, но не индекс? Используйте remove() (первое совпадение) или списковое включение (все совпадения или сложные условия).
  • Знаете индекс? Используйте pop(index), если нужно получить значение обратно, или del list[index], если нет.
  • Нужно очистить весь список? Используйте clear().
  • Нужно удалить диапазон последовательных элементов? Используйте del list[start:stop].

Связанные главы

Практика

Практика
Какие из следующих инструментов можно использовать для удаления элементов из списка Python?
Какие из следующих инструментов можно использовать для удаления элементов из списка Python?
Was this page helpful?