todos Como esvaziar uma lista em Python?
remove all items from a list python (5)
Acontece que com o Python 2.5.2, del l[:]
é um pouco mais lento que l[:] = []
por 1.1 usec.
$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
https://code.i-harness.com
Parece tão "sujo" esvaziar uma lista desta maneira:
while len(alist) > 0 : alist.pop()
Existe um caminho claro para fazer isso?
Isso realmente remove o conteúdo da lista, mas não substitui o rótulo antigo por uma nova lista vazia:
del lst[:]
Aqui está um exemplo:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Por uma questão de completude, a atribuição de fatia tem o mesmo efeito:
lst[:] = []
Também pode ser usado para reduzir uma parte da lista enquanto substitui uma parte ao mesmo tempo (mas isso está fora do escopo da questão).
Note que fazer lst = []
não esvazia a lista, apenas cria um novo objeto e o liga à variável lst
, mas a lista antiga ainda terá os mesmos elementos, e o efeito será aparente se tiver outras ligações de variáveis.
Se você estiver executando o Python 3.3 ou superior, você pode usar o método clear()
da list
, que é paralelo a clear()
do dict
, set
, deque
e outros tipos de contêineres mutáveis:
alist.clear() # removes all items from alist (equivalent to del alist[:])
De acordo com a página de documentação vinculada, o mesmo também pode ser obtido com alist *= 0
.
Resumindo, há quatro maneiras equivalentes de limpar uma lista no local (bem ao contrário do Zen do Python !):
-
alist.clear() # Python 3.3+
-
del alist[:]
-
alist[:] = []
-
alist *= 0
Você poderia tentar:
alist[:] = []
O que significa: Splice na lista []
(0 elementos) no local [:]
(todos os índices do início ao fim)
O [:] é o operador de fatia. Veja esta questão para mais informações.
lst *= 0
tem o mesmo efeito que
lst[:] = []
É um pouco mais simples e talvez mais fácil de lembrar. Além disso, não há muito a dizer
A eficiência parece ser a mesma