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 notinlist >>> 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) позволяет удалять диапазон индексов из-за нарезки списка:
Другие уже достаточно хорошо ответили. Этот с моей стороны :)
Очевидно, pop это единственный, который возвращает значение, и remove это единственный, который выполняет поиск в объекте, в то время как del ограничивается простым удалением.