>>> 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]
>>>
Есть ли разница между тремя вышеуказанными методами для удаления элемента из списка?
>>> 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]
>>>
Есть ли разница между тремя вышеуказанными методами для удаления элемента из списка?
Да, remove
удаляет первое совпадающее значение, а не определенный индекс:
>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]
del
удаляет определенный индекс:
>>> a = [3, 2, 2, 1]
>>> del a[1]
[3, 2, 1]
и 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
Используйте del
, чтобы удалить элемент по индексу, pop()
, чтобы удалить его по индексу, если вам нужно возвращенное значение, и remove()
, чтобы удалить элемент по значению. Последнее требует поиска в списке и повышает значение ValueError
, если в списке нет такого значения.
При удалении индекса i
из списка элементов n
вычислительные сложности этих методов
del O(n - i)
pop O(n - i)
remove O(n)
Так как никто не упомянул об этом, обратите внимание, что 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]
Уже хорошо ответил. Это с моей стороны:)
pop: принимает индекс и возвращает значение
remove: принимает значение, удаляет первое вхождение и ничего не возвращает
delete: принимает индекс, удаляет значение в этом индексе и ничего не возвращает
В то время как pop и delete оба принимают индексы, чтобы удалить элемент, как указано в приведенных выше комментариях. Ключевым отличием является временная сложность для них. Сложность по времени для pop() без индекса - O (1), но это не тот же случай для удаления последнего элемента.
Если ваш случай использования всегда должен удалять последний элемент, всегда желательно использовать функцию pop() over delete(). Для более подробного объяснения сложностей во времени вы можете обратиться к https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt
Любая операция/функция в разных структурах данных определяется для конкретных действий. Здесь, в вашем случае, например, удаление элемента, удаление, поп и удаление. (Если вы рассматриваете наборы, добавьте еще одну операцию - отбросьте) Другой запутанный случай - это при добавлении. Включить /Append. Для демонстрации, Реализуем deque. deque - это гибридная линейная структура данных, в которой вы можете добавлять элементы/удалять элементы с обоих концов. (Задний и передний концы)
class Deque(object):
def __init__(self):
self.items=[]
def addFront(self,item):
return self.items.insert(0,item)
def addRear(self,item):
return self.items.append(item)
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
def returnAll(self):
return self.items[:]
Здесь, смотрите операции:
def deleteFront(self):
return self.items.pop(0)
def deleteRear(self):
return self.items.pop()
Операции должны что-то вернуть. Итак, поп - с индексом и без него. Если я не хочу возвращать значение: del self.items [0]
Удалить по значению не индекс:
удалить:
list_ez=[1,2,3,4,5,6,7,8]
for i in list_ez:
if i%2==0:
list_ez.remove(i)
print list_ez
рассмотрим случай множеств.
set_ez=set_ez=set(range(10))
set_ez.remove(11)
# Gives Key Value Error.
##KeyError: 11
set_ez.discard(11)
# Does Not return any errors.
Вы также можете использовать remove для удаления значения по индексу.
n = [1, 3, 5]
n.remove(n[1])
n будет ссылаться на [1, 5]