Да, 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 notin 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
@jxramos: delнет удержания синтаксиса, нет. Синтаксис неизменен, как и returnили ifили while.
Мартин Питерс
6
Стоит отметить, что пользователи должны быть осторожны при переборе списка и использовании этих функций в нем одновременно с перебором.
hamaney
16
delПример несколько вводит в заблуждение. Какой именно элемент удален? 2-й или 3-й? Вы должны были использовать [9, 8, 7, 6], del a[1]и[9, 7, 6]
gromit190
2
@ rite2hhh это проверяет на равенство. Тесты на равенство проверяют идентичность сначала как оптимизацию
Мартейн Питерс
1
@ rite2hhh: равенство значений рассматривается в ссылке на выражение .
Мартин Питерс
184
Используйте delдля удаления элемента по индексу, pop()для удаления его по индексу, если вам нужно возвращаемое значение, и remove()для удаления элемента по значению. Последний требует поиска в списке и повышается, ValueErrorесли в списке нет такого значения.
При удалении индекса iиз списка nэлементов вычислительные сложности этих методов
+1 за разбивку сложности. Иллюстрирует, как delete и pop постоянны, когда элемент находится в конце списка.
Большой Шарпи
2
Помните, ребята ... все, что основано на индексе, это один выстрел O (n-1) ... если вам нужно выполнить поиск (по значению), он будет проходить по коллекции, пока не будет найден элемент.
Пепито Фернандес
2
@PepitoFernandez Поиск по индексу в списке - O (1) в Python. (Список в Python похож на вектор в C ++.)
Свен Марнах
3
@PlasmaBinturong Вы должны использовать то, что считаете более читабельным, если только у вас нет данных, подтверждающих, что производительность имеет значение. И если у вас есть, вам нужно измерить, что быстрее в вашем конкретном случае. Я также думаю, что delэто немного быстрее, но по другой причине: поиск __delitem__типа, реализованного в C, происходит по индексу, а не по имени, в то время как его popнужно искать, следуя всему протоколу дескриптора. Выполнение самих функций должно занимать столько же времени. Оба возвращают указатель - один на удаленный объект, другой на None.
Свен Марнач
92
Поскольку никто другой не упомянул об этом, обратите внимание, что del(в отличие от pop) позволяет удалить диапазон индексов из-за нарезки списка:
>>> lst =[3,2,2,1]>>>del lst[1:]>>> lst[3]
Это также позволяет избежать, IndexErrorесли индекс отсутствует в списке:
Любая операция / функция в различных структурах данных определяется для конкретных действий. Вот в вашем случае т.е. удаление элемента, удаление, выскочить и удалить. (Если вы рассматриваете наборы, добавьте еще одну операцию - отбросьте) Другой запутанный случай - при добавлении. Вставка / Append. Для демонстрации, давайте введем deque. deque - это гибридная линейная структура данных, в которую можно добавлять элементы / удалять элементы с обоих концов (задний и передний концы).
В то время как pop и delete оба принимают индексы для удаления элемента, как указано в комментариях выше. Ключевым отличием является сложность времени для них. Временная сложность для pop () без индекса равна O (1), но это не тот же случай для удаления последнего элемента.
Если ваш вариант использования всегда заключается в удалении последнего элемента, всегда лучше использовать pop (), а не delete (). Для получения дополнительной информации о временных сложностях вы можете обратиться к https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt.
Это неправильно несколькими способами. Нет такого метода как delete. Различия в том, что popвозвращает значение и delработает на срезах. В тех случаях, когда popработает, delимеет точно такую же вычислительную сложность (и немного быстрее на постоянный член).
Абарнерт
1
Операция удаления в списке получает значение для удаления. Он ищет в списке, чтобы найти элемент с этим значением, и удаляет первый соответствующий элемент, который он находит. Это ошибка, если нет соответствующего элемента, вызывает ValueError .
>>> x =[1,0,0,0,3,4,5]>>> x.remove(4)>>> x
[1,0,0,0,3,5]>>>del x[7]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[7]IndexError: list assignment index out of range
Оператор del может использоваться для удаления всего списка. Если у вас есть определенный элемент списка в качестве аргумента для del (например, listname [7] для конкретной ссылки на восьмой элемент в списке), он просто удалит этот элемент. Можно даже удалить «ломтик» из списка. Это ошибка, если индекс выходит за пределы допустимого диапазона, вызывает ошибку IndexError .
>>> x =[1,2,3,4]>>>del x[3]>>> x
[1,2,3]>>>del x[4]Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>del x[4]IndexError: list assignment index out of range
Обычное использование pop - удалить последний элемент из списка, когда вы используете список в качестве стека. В отличие от del, pop возвращает значение, которое он вытолкнул из списка. При желании вы можете задать значение индекса для pop и pop, отличное от конца списка (например, listname.pop (0) удалит первый элемент из списка и вернет этот первый элемент в качестве результата). Вы можете использовать это, чтобы список вел себя как очередь, но есть доступные библиотечные подпрограммы, которые могут обеспечить работу очереди с большей производительностью, чем pop (0). Это ошибка, если индекс выходит за пределы допустимого диапазона, вызывает ошибку IndexError .
>>> x =[1,2,3]>>> x.pop(2)3>>> x
[1,2]>>> x.pop(4)Traceback(most recent call last):File"<pyshell#1>", line 1,in<module>
x.pop(4)IndexError: pop index out of range
Удалить в основном работает на стоимость. Удалить и вспомнить работу над индексом
Удалить в основном удаляет первое совпадающее значение. Удалить удаляет элемент из определенного индекса. Pop обычно берет индекс и возвращает значение по этому индексу. В следующий раз, когда вы распечатаете список, значение не появится.
Хотя мы благодарим вас за ваш ответ, было бы лучше, если бы он предоставил дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительной ценности, поскольку другие пользователи покрывали все, что вы включили в свой ответ. В качестве дополнительной проблемы, пожалуйста, не включайте текст в виде картинок, когда вы можете вставить его как текст. Если предыдущий ответ был вам полезен, вы должны проголосовать за него .
Дэвид Бак
-3
Вы также можете использовать команду remove для удаления значения по индексу.
@abarnert ваш вариант использования работает синхронно с приведенным ниже случаем n = [5,3,5], затем n.remove (5). Оба они удаляют первый встреченный элемент из списка.
Ахил Гатики
@AkhilGhatiki n.remove(n[2])удаляет n[0], а не n[2]. Так что это не просто линейное время без причины (может быть, это не так важно, когда N = 3), это также неправильно (большое дело, независимо от того, что такое N)
Ответы:
Да,
remove
удаляет первое совпадающее значение , а не конкретный индекс:del
удаляет элемент по определенному индексу:и
pop
удаляет элемент по определенному индексу и возвращает его.Их режимы ошибок тоже разные:
источник
del
нет удержания синтаксиса, нет. Синтаксис неизменен, как иreturn
илиif
илиwhile
.del
Пример несколько вводит в заблуждение. Какой именно элемент удален? 2-й или 3-й? Вы должны были использовать[9, 8, 7, 6]
,del a[1]
и[9, 7, 6]
Используйте
del
для удаления элемента по индексу,pop()
для удаления его по индексу, если вам нужно возвращаемое значение, иremove()
для удаления элемента по значению. Последний требует поиска в списке и повышается,ValueError
если в списке нет такого значения.При удалении индекса
i
из спискаn
элементов вычислительные сложности этих методовисточник
del
это немного быстрее, но по другой причине: поиск__delitem__
типа, реализованного в C, происходит по индексу, а не по имени, в то время как егоpop
нужно искать, следуя всему протоколу дескриптора. Выполнение самих функций должно занимать столько же времени. Оба возвращают указатель - один на удаленный объект, другой наNone
.Поскольку никто другой не упомянул об этом, обратите внимание, что
del
(в отличие отpop
) позволяет удалить диапазон индексов из-за нарезки списка:Это также позволяет избежать,
IndexError
если индекс отсутствует в списке:источник
Уже неплохо ответили другие. Это с моего конца :)
Очевидно,
pop
это единственный, который возвращает значение, иremove
единственный, который ищет объект, ноdel
ограничивается простым удалением.источник
pop - берет индекс и возвращает значение
удалить - принимает значение, удаляет первое вхождение и ничего не возвращает
delete - принимает индекс, удаляет значение по этому индексу и ничего не возвращает
источник
Многие лучшие объяснения здесь, но я постараюсь сделать все возможное, чтобы упростить еще.
Среди всех этих методов reverse & pop - это постфикс, а delete - префикс .
remove (): используется для удаления первого вхождения элемента
remove(i)
=> первое вхождение значения ipop (): используется для удаления элемента, если:
неопределенные
pop()
=> от конца спискауказанный
pop(index)
=> индексаВНИМАНИЕ: впереди опасный метод
delete () : это префиксный метод.
Следите за двумя различными синтаксисами для одного и того же метода: [] и (). Он обладает способностью:
1. Удалить индекс
del a[index]
=> используется для удаления индекса и связанного с ним значения так же, как pop.2. Удалить значения в диапазоне [индекс 1: индекс N]
del a[0:3]
=> несколько значений в диапазоне3.Последний, но не список, чтобы удалить весь список за один раз
del (a)
=> как сказано выше.Надеюсь, что это проясняет путаницу, если таковые имеются.
источник
Любая операция / функция в различных структурах данных определяется для конкретных действий. Вот в вашем случае т.е. удаление элемента, удаление, выскочить и удалить. (Если вы рассматриваете наборы, добавьте еще одну операцию - отбросьте) Другой запутанный случай - при добавлении. Вставка / Append. Для демонстрации, давайте введем deque. deque - это гибридная линейная структура данных, в которую можно добавлять элементы / удалять элементы с обоих концов (задний и передний концы).
Здесь, см. Операции:
Шеф должен что-то вернуть. Итак, поп - с индексом и без. Если я не хочу возвращать значение: del self.items [0]
Удалить по значению, а не по индексу:
Удалить :
Возвращает [1,3,5,7]
рассмотрим случай множеств.
источник
В то время как pop и delete оба принимают индексы для удаления элемента, как указано в комментариях выше. Ключевым отличием является сложность времени для них. Временная сложность для pop () без индекса равна O (1), но это не тот же случай для удаления последнего элемента.
Если ваш вариант использования всегда заключается в удалении последнего элемента, всегда лучше использовать pop (), а не delete (). Для получения дополнительной информации о временных сложностях вы можете обратиться к https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt.
источник
delete
. Различия в том, чтоpop
возвращает значение иdel
работает на срезах. В тех случаях, когдаpop
работает,del
имеет точно такую же вычислительную сложность (и немного быстрее на постоянный член).Операция удаления в списке получает значение для удаления. Он ищет в списке, чтобы найти элемент с этим значением, и удаляет первый соответствующий элемент, который он находит. Это ошибка, если нет соответствующего элемента, вызывает ValueError .
Оператор del может использоваться для удаления всего списка. Если у вас есть определенный элемент списка в качестве аргумента для del (например, listname [7] для конкретной ссылки на восьмой элемент в списке), он просто удалит этот элемент. Можно даже удалить «ломтик» из списка. Это ошибка, если индекс выходит за пределы допустимого диапазона, вызывает ошибку IndexError .
Обычное использование pop - удалить последний элемент из списка, когда вы используете список в качестве стека. В отличие от del, pop возвращает значение, которое он вытолкнул из списка. При желании вы можете задать значение индекса для pop и pop, отличное от конца списка (например, listname.pop (0) удалит первый элемент из списка и вернет этот первый элемент в качестве результата). Вы можете использовать это, чтобы список вел себя как очередь, но есть доступные библиотечные подпрограммы, которые могут обеспечить работу очереди с большей производительностью, чем pop (0). Это ошибка, если индекс выходит за пределы допустимого диапазона, вызывает ошибку IndexError .
См. Collection.deque для более подробной информации.
источник
Удалить в основном работает на стоимость. Удалить и вспомнить работу над индексом
Удалить в основном удаляет первое совпадающее значение. Удалить удаляет элемент из определенного индекса. Pop обычно берет индекс и возвращает значение по этому индексу. В следующий раз, когда вы распечатаете список, значение не появится.
источник
Вы также можете использовать команду remove для удаления значения по индексу.
Тогда n будет ссылаться на [1, 5]
источник
n = [5, 3, 5]
тогдаn.remove(n[2])
.n.remove(n[2])
удаляетn[0]
, а неn[2]
. Так что это не просто линейное время без причины (может быть, это не так важно, когда N = 3), это также неправильно (большое дело, независимо от того, что такое N)