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 !):

  1. alist.clear() # Python 3.3+
  2. del alist[:]
  3. alist[:] = []
  4. 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







list