Вопрос-Ответ

Difference between del, remove, and pop on lists in Python

Разница между del, remove и pop в списках в Python

Есть ли какая-либо разница между этими тремя методами удаления элемента из списка в Python?

a = [1, 2, 3]
a.remove(2)
a # [1, 3]

a = [1, 2, 3]
del a[1]
a # [1, 3]

a = [1, 2, 3]
a.pop(1) # 2
a # [1, 3]
Переведено автоматически
Ответ 1

Эффекты трех различных методов удаления элемента из списка:

remove удаляет первое совпадающее значение, а не конкретный индекс:

>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]

del удаляет элемент с определенным индексом:

>>> a = [9, 8, 7, 6]
>>> del a[1]
>>> a
[9, 7, 6]

и pop удаляет элемент с определенным индексом и возвращает его.

>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]

Режимы ошибок у них тоже разные:

>>> a = [4, 5, 6]
>>> a.remove(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> del a[7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a.pop(7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: pop index out of range
Ответ 2

Используйте del для удаления элемента по индексу, pop() для удаления его по индексу, если вам нужно возвращаемое значение, и remove() для удаления элемента по значению. Последнее требует поиска по списку и вызывает ValueError, если такого значения в списке нет.

При удалении index i из списка n элементов вычислительные сложности этих методов следующие

del     O(n - i)
pop O(n - i)
remove O(n)
Ответ 3

Поскольку никто больше не упоминал об этом, обратите внимание, что del (в отличие от pop) позволяет удалять диапазон индексов из-за нарезки списка:

>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]

Это также позволяет избежать IndexError если индекса нет в списке:

>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
Ответ 4

Другие уже достаточно хорошо ответили. Этот с моей стороны :)

удалить против pop против del

Очевидно, pop это единственный, который возвращает значение, и remove это единственный, который выполняет поиск в объекте, в то время как del ограничивается простым удалением.

python list