По умолчанию, pop без каких-либо аргументов удаляет последний элемент:
a = ['a', 'b', 'c', 'd'] a.pop()
# now a is ['a', 'b', 'c']
Ответ 3
Как и другие упомянутые, pop и del являются эффективными способами удаления элемента с заданным индексом. Но только ради завершения (поскольку то же самое можно сделать многими способами в Python):
Использование фрагментов (это не выполняется при удалении элемента из исходного списка):
(Также это будет наименее эффективный метод при работе со списком Python, но это может быть полезно (но, повторяю, неэффективно) при работе с определяемыми пользователем объектами, которые не поддерживают pop, но определяют a __getitem__ ):
>>> a = [1, 2, 3, 4, 5, 6] >>> index = 3# Only positive index
>>> a = a[:index] + a[index+1 :] # a is now [1, 2, 3, 5, 6]
Примечание: Пожалуйста, обратите внимание, что этот метод не изменяет список на месте, как pop и del. Вместо этого он создает две копии списков (одну от начала до индекса, но без него (a[:index]) и одну после индекса до последнего элемента (a[index+1:])) и создает новый объект list, добавляя оба. Затем он переназначается переменной list (a). Следовательно, разыменовывается старый объект list и, следовательно, собирается мусор (при условии, что на исходный объект list не ссылается никакая переменная, кроме a ).
Это делает этот метод очень неэффективным, а также может приводить к нежелательным побочным эффектам (особенно когда другие переменные указывают на исходный объект списка, который остается неизмененным).
Спасибо @MarkDickinson за указание на это ...
Этот ответ Stack Overflow объясняет концепцию нарезки.
Также обратите внимание, что это работает только с положительными индексами.
При использовании с объектами должен быть определен __getitem__ метод и, что более важно, __add__ метод должен быть определен для возврата объекта, содержащего элементы из обоих операндов.
По сути, это работает с любым объектом, определение класса которого похоже:
Примечание: Во всех трех дизассемблированиях игнорируются последние две строки, которые в основном являются return None. Также первые две строки загружают глобальные значения a и index.
Ответ 4
Если вы хотите удалить элементы на определенных позициях в списке, например, 2-й, 3-й и 7-й элементы, вы не можете использовать
del my_list[2] del my_list[3] del my_list[7]
Поскольку после удаления второго элемента, третий элемент, который вы удаляете, фактически является четвертым элементом в исходном списке. Вы можете отфильтровать 2-й, 3-й и 7-й элементы в исходном списке и получить новый список, как показано ниже:
new_list = [j for i, j inenumerate(my_list) if i notin [2, 3, 7]]